Concordione: comando verifyRows
Il comando Concordion verifyRows può essere utilizzato per controllare il contenuto di una raccolta restituita come risultato dal sistema. Ad esempio, se configuriamo un insieme di utenti nel sistema e facciamo una ricerca parziale su di essi, il sistema dovrebbe restituire gli elementi corrispondenti, altrimenti i nostri test di accettazione dovrebbero fallire.
Considera il seguente requisito:
<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>
Se vogliamo scrivere una specifica per tale funzione di ricerca che cercherà e restituirà una raccolta, la specifica sarà la seguente:
<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>
Quando Concordion analizza il documento, eseguirà addUser () su ogni riga della prima tabella e quindi imposterà searchString su J. Successivamente, Concordion eseguirà la funzione di ricerca che dovrebbe restituire un oggetto Iterable con un ordine di iterazione prevedibile, (ad es. a List, LinkedHashSet o TreeSet), verifyRows viene eseguito per ogni elemento della raccolta ed esegue il comando assertEquals.
Esempio
Mettiamo in atto un IDE Eclipse funzionante e seguiamo i passaggi indicati di seguito per creare un'applicazione Concordion -
Passo | Descrizione |
---|---|
1 | Crea un progetto con un nome concordion e crea un pacchetto com.tutorialspoint sottosrc cartella nel progetto creato. |
2 | Aggiungere le librerie Concordion richieste utilizzando l' opzione Add External JARs come spiegato nel capitolo Concordion - First Application . |
3 | Crea un sistema di classi Java nel pacchetto com.tutorialspoint . |
4 | Crea la classe Fixture SystemFixture nel pacchetto specs.tutorialspoint . |
5 | Crea specifica html System.html nel pacchetto specs.tutorialspoint . |
6 | Il passaggio finale consiste nel creare il contenuto di tutti i file Java e del file delle specifiche ed eseguire l'applicazione come spiegato di seguito. |
Ecco il contenuto del file 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;
}
}
Di seguito è riportato il contenuto del file 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);
}
}
Di seguito è riportato il contenuto del file 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>
Una volta che hai finito di creare i file sorgente e di specifica, eseguiamo l'applicazione come JUnit Test. Se tutto va bene con la tua applicazione, produrrà il seguente risultato:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
System.html è l'output dell'esecuzione di test Concordion.