Concordion - comando verifyRows

El comando Concordion verifyRows se puede utilizar para verificar el contenido de una colección devuelta como resultado por el sistema. Por ejemplo, si configuramos un conjunto de usuarios en el sistema y hacemos una búsqueda parcial en ellos, entonces el sistema debería devolver los elementos coincidentes; de lo contrario, nuestras pruebas de aceptación deberían fallar.

Considere el siguiente 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>

Si queremos escribir una especificación para dicha función de búsqueda que buscará y devolverá una colección, entonces la especificación será la siguiente:

<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>

Cuando Concordion analiza el documento, ejecutará addUser () en cada fila de la primera tabla y luego establecerá el searchString en J. A continuación, Concordion ejecutará la función de búsqueda que debería devolver un objeto Iterable con un orden de iteración predecible, (p. Ej. List, LinkedHashSet o TreeSet), verifyRows se ejecuta para cada elemento de la colección y ejecuta el comando assertEquals.

Ejemplo

Tengamos un IDE de Eclipse en funcionamiento y sigamos los pasos que se indican a continuación para crear una aplicación Concordion:

Paso Descripción
1 Cree un proyecto con un nombre concordion y cree un paquete com.tutorialspoint bajo elsrc carpeta en el proyecto creado.
2 Agregue las bibliotecas de Concordion necesarias mediante la opción Agregar JAR externos como se explica en el capítulo Concordion - Primera aplicación .
3 Cree un sistema de clases Java en el paquete com.tutorialspoint .
4 Crear Fixture clase SystemFixture bajo la specs.tutorialspoint paquete.
5 Cree Specification html System.html en el paquete specs.tutorialspoint .
6 El paso final es crear el contenido de todos los archivos Java y el archivo de especificación y ejecutar la aplicación como se explica a continuación.

Aquí está el contenido del archivo 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;
   }
}

A continuación se muestra el contenido del archivo 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);
   }
}

A continuación se muestra el contenido del archivo 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 vez que haya terminado de crear los archivos fuente y de especificación, ejecutemos la aplicación como JUnit Test. Si todo está bien con su aplicación, producirá el siguiente resultado:

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0

System.html es el resultado de la ejecución de prueba de Concordion.