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コマンドを実行します。
例
動作するEclipseIDEを配置し、以下の手順に従ってConcordionアプリケーションを作成しましょう-
ステップ | 説明 |
---|---|
1 | concordionという名前のプロジェクトを作成し、の下にパッケージcom.tutorialspointを作成します。src 作成したプロジェクトのフォルダ。 |
2 | 「Concordion-最初のアプリケーション」の章で説明されているように、「外部JARの追加」オプションを使用して必要なConcordionライブラリーを追加します。 |
3 | com.tutorialspointパッケージの下にJavaクラスSystemを作成します。 |
4 | specs.tutorialspointパッケージの下にFixtureクラスSystemFixtureを作成します。 |
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テストとして実行しましょう。アプリケーションですべてが正常である場合、次の結果が生成されます-
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
System.htmlは、Concordionテスト実行の出力です。