Команда Concordion verifyRows может использоваться для проверки содержимого коллекции, возвращенной в результате системой. Например, если мы настроили группу пользователей в системе и выполнили частичный поиск по ним, тогда система должна вернуть соответствующие элементы, в противном случае наши приемочные тесты не пройдут.
Рассмотрим следующее требование —
<table> <tr><th>Users</th></tr> <tr><td>Robert De</td></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table> <p>Search for J should return:</p> <table> <tr><th>Matching Users</th></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table>
Если мы хотим написать спецификацию для такой функции поиска, которая будет искать и возвращать коллекцию, тогда спецификация будет выглядеть следующим образом:
<table concordion:execute = "addUser(#username)"> <tr><th concordion:set = "#username">Username</th></tr> <tr><td>Robert De</td></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table> <p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p> <table concordion:verifyRows = "#username : search(#searchString)"> <tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table>
Когда Concordion анализирует документ, он выполняет addUser () для каждой строки первой таблицы, а затем устанавливает для searchString значение J. Затем Concordion выполнит функцию поиска, которая должна возвратить объект Iterable с предсказуемым порядком итерации (например, List, LinkedHashSet или TreeSet), verifyRows запускается для каждого элемента коллекции и запускает команду assertEquals.
пример
Давайте создадим рабочую среду Eclipse и следуем приведенным ниже инструкциям, чтобы создать приложение Concordion.
шаг | Описание |
---|---|
1 | Создайте проект с именем concordion и создайте пакет com.tutorialspoint в папке src в созданном проекте. |
2 | Добавьте необходимые библиотеки Concordion, используя опцию Add External JARs, как описано в главе Concordion — First Application . |
3 | Создайте Java-класс System в пакете com.tutorialspoint . |
4 | Создайте класс Fixture SystemFixture в пакете specs.tutorialspoint . |
5 | Создать спецификацию html System.html в пакете specs.tutorialspoint . |
6 | Последний шаг — создать содержимое всех файлов Java и файла спецификации и запустить приложение, как описано ниже. |
Вот содержимое файла System.java —
package com.tutorialspoint; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; public class System { private Set<String> users = new HashSet<String>(); public void addUser(String username) { users.add(username); } public Iterable<String> search(String searchString) { SortedSet<String> matches = new TreeSet<String>(); for (String username : users) { if (username.contains(searchString)) { matches.add(username); } } return matches; } }
Ниже приводится содержание файла SystemFixture.java —
package specs.tutorialspoint; import org.concordion.integration.junit4.ConcordionRunner; import org.junit.runner.RunWith; import com.tutorialspoint.System; @RunWith(ConcordionRunner.class) public class SystemFixture { System system = new System(); public void addUser(String username) { system.addUser(username); } public Iterable<String> search(String searchString) { return system.search(searchString); } }
Ниже приводится содержание файла System.html —
<html xmlns:concordion = "http://www.concordion.org/2007/concordion"> <head> <link href = "../concordion.css" rel = "stylesheet" type = "text/css" /> </head> <body> <h1>System Specifications</h1> <p>We are building specifications for our online order tracking application.</p> <p>Following is the requirement to add a partial search capability on user names:</p> <div class = "example"> <h3>Example</h3> <table concordion:execute = "addUser(#username)"> <tr><th concordion:set = "#username">Username</th></tr> <tr><td>Robert De</td></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table> <p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p> <table concordion:verifyRows = "#username : search(#searchString)"> <tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr> <tr><td>John Diere</td></tr> <tr><td>Julie Re</td></tr> </table> </div> </body> </html>
Как только вы закончите с созданием исходного кода и файлов спецификации, давайте запустим приложение как JUnit Test. Если с вашим приложением все в порядке, оно даст следующий результат:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html Successes: 2, Failures: 0
System.html — это результат теста Concordion.