Concordion - команда verifyRows
Команду 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.
пример
Разрешите нам иметь рабочую среду IDE Eclipse и выполнить шаги, указанные ниже, чтобы создать приложение Concordion:
Шаг | Описание |
---|---|
1 | Создайте проект с именем concordion и создайте пакет com.tutorialspoint подsrc папку в созданном проекте. |
2 | Добавьте необходимые библиотеки Concordion с помощью опции Добавить внешние JAR, как описано в главе Concordion - Первое приложение . |
3 | Создайте систему классов Java в пакете com.tutorialspoint . |
4 | Создайте класс Fixture SystemFixture в пакете specs.tutorialspoint . |
5 | Создайте Specification 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.