Ir al contenido principal

¿PRUEBAS DE ACEPTACION? CONCORDION ES TU FRAMEWORK

Algo indispensable en nuestras aplicaciones es el desarrollo de pruebas para comprobar que nuestro código funciona y además que cumple con los requisitos deseados por los clientes.

Fuente: sg.com.mx


En muchos lugares donde he trabajado se realizan las pruebas unitarias y de integración y luego se construye un documento Word o HTML donde se especifican las pruebas que se han realizado de nuestra aplicación, para que el cliente compruebe si se satisfacen o no todas sus necesidades de negocio con el código desarrollado. Pero, ¿y si pudieramos realizar las pruebas a la misma vez que generamos documentación? 



Para esto sirve precisamente el framework Concordion:

  • Escribimos las pruebas de aceptación de nuestra aplicación mediante un documento XHTML bien formado y describimos el comportamiento de nuestro código.
  • Asociado a este documento tendemos una clase Java donde implementaremos el código Java de las pruebas. 
Las clases Java de pruebas y los documentos HTML deben estar en el mismo paquete. Como estandar se crea una carpeta llamado specs en nuestro proyecto. Para generar la documentación, ejecutaremos la clase Java como un test de Junit normal y se generarán los documentos XHTML del mismo paquete pero con la partes correspondientes al test iluminadas en verde (si ha ido bien), rojo (si ha ido mal) o amarillo (si se ha producido una excepción).  Los documentos se generarán en el directorio indicado por java.io .mpdir que suele ser el directorio por defecto del usuario.

También existe un plugin de Maven para integrar la ejecución de los test de Concordion con el ciclo de vida de Maven.

Como el movimiento se demuestra andando pongamos un ejemplo para que todo esto se vea más claro.

Primero nos creamos un proyecto simple con Maven y le añadimos la dependencia de Concordion. 


<dependency>
    <groupId>org.concordion</groupId>
    <artifactId>concordion</artifactId>
    <version>1.4.4</version>
</dependency>


También podemos crear un proyecto Java normal y descargar la distribución de Concordion aquí

Una vez que lo hemos hecho deberiamos tener un proyecto parecido al siguiente:




Nos creamos una clase Calculadora con tres operaciones básicas de suma, resta y producto:

package es.jpascu.concordion;

public class Calculadora {

 public Calculadora() {
 }

 public static Integer suma(Integer a, Integer b) {
  return a + b;
 }

 public static Integer resta(Integer a, Integer b) {
  return a - b;
 }

 public static Integer producto(Integer a, Integer b) {
  return a * b;
 }
}

Después creamos la clase de test de nuestra clase Calculadora. Podremos acceder a los métodos de esta clase en nuestro XHTML:



package es.jpascu.concordion;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)
public class CalculadoraFixture {

 public Integer testSuma(Integer a, Integer b) {
  Integer c = Calculadora.suma(a, b);
  return c;
 }

 public Integer testResta(Integer a, Integer b) {
  Integer c = Calculadora.resta(a, b);
  return c;
 }

 public Integer testProducto(Integer a, Integer b) {
  int c = Calculadora.producto(a, b);
  return c;
 }
}

Por último escribimos nuestros test funcionales en nuestro XHTML:

<html xmlns:concordion="http://www.concordion.org/2007/concordion">
    <body>
   
       <h1>Pruebas de aceptacion de Calculadora</h1>
       <br/>
        <p>
            El resultado de <span concordion:set="#a">4</span> más <span concordion:set="#b">3</span>
             debe ser <span concordion:assertEquals="testSuma(#a, #b)">7</span>                     
        </p>
         <p>
            El resultado de <span concordion:set="#a">4</span> menos <span concordion:set="#b">3</span>
             debe ser <span concordion:assertEquals="testResta(#a, #b)">1</span>                     
        </p>
         <p>
            El resultado de <span concordion:set="#a">4</span> por <span concordion:set="#b">3</span>
             debe ser <span concordion:assertEquals="testProducto(#a, #b)">12</span>                     
        </p>
    </body>
</html>

Como estamos viendo primero definimos el namespace de concordion dentro de nuestro XHTML dentro de la etiqueta HTML. Cuando el navegador encuentre una etiqueta con este namespace la ignorará. 

Con la etiqueta concordion:set establecemos el valor de una variable y con concordion:assertEquals comprobamos que el método testXYX devuelve un valor concreto.

El resultado al ejecutar la clase de pruebas como JUnit es un documento de pruebas de aceptación en formato HTML como nosotros definamos:

Vemos que el resultado de assertEquals se ilumina en verde siempre que el test haya sido OK.

Espero que os haya servido para haceros una idea del proposito de este framework e iniciaros con el mismo.

Salu2. 


Comentarios

Entradas populares de este blog

Soluciones Alchemy Classic 389 elementos

Hace algún tiempo salió una actualización del Juego Alchemy Classic en la que aparecían más elementos (389 en lugar de 238). Aparte de añadir elementos mejoran algunas traducciones en castellano y mejoran la interfaz, aunque todavía hay algún error en algunos nombres de elementos. Aquí os dejo las soluciones para los que estén atascados y no puedan dormir por las noches: Sustancia primaria Aire=Elemento primario  Fuego=Elemento primario  Agua=Elemento primario  Tierra=Sustancia Primaria Arena=Piedra + Aire Piedra=Tierra + Fuego Arcilla=Arena + Pantano Caliza=Tierra + Amonitas Carbono=Fuego + Madera Cloro=Fuego + Sal + Electricidad CO2(Dióxido de Carbono)=Ceniza + Ácido nítrico Electricidad=Relámpago+ Metales Gas natural= Yacimiento de gas + Pozo Helio=Refinería de gas + Gas Natural Hidrógeno=Electricidad + Agua Hielo=Frío + Agua Imán=Piedra + Metales Metano=Deshechos Vegetales + Pantano Oxígeno=Electricidad + Agua Pe...

Soluciones Alchemy Classic 442 elementos

Después de la resaca navideña y de la cuesta de enero, volvemos para informar la agradable sorpresa que nos ha dado a los fans de Alchemy Classic la empresa NIASOF ,  tras actualizar el juego Alchemy Classic. Una nueva versión con 442 elementos , interfaz mejorada de grupos y lo más importante, nuevos elementos que descubrir. La gran novedad de esta actualización son los puntos que tienes asignados , con los que puedes  conseguir pistas sobre los elementos que no has abierto todavía como: Conseguir un subelemento de un elemento, con 100 puntos . Conseguir el grupo de un subelemento de un elemento (qué lío , jeje), con 35 puntos . Me gusta, me gusta el enfoque de esta nueva versión aunque los elementos que han sacado me parecen poco originales. Parece que se van agotando las ideas para los elementos nuevos. Aquí van las soluciones: Carbon = Tierra + Turba Sol = Estrella + Tierra Espacio = 3 x Estrella Estrella = Helio + Hidrógeno Oso Pa...

Alchemy Classic

Dentro de los juegos que he descargado con el Android Market hay dos que destacan sobre todos los demás. El primero es Angry Birds (pájaros furiosos), en el cual comandas un ejercito de pájaros para luchar con una piara de cerdos malotes los cuales han robado sus huevos. Básicamente, tienes que ir pasando nivel tras nivel afinando tu puntería lanzando los pájaros a los cerdos que se esconden tras maderas, cristales y piedras. Pero la verdadera joya que no es tan conocida es Alchemy Classic . En este juego puedes desempeñar el papel  de Dios. Comenzando con 4 elementos básicos, Aire, Agua, Tierra y Fuego tienes que ir obteniendo todos los demás elementos de la creación (animales, plantas, herramientas...) mediante la combinación de los 4 primeros. En total hay 238 elementos. Después de una semana y alguna noche sin dormir por fin los he obtenido todos. El último elemento me ha llevado más de la cuenta por su maravillosa traducción. ¿Qué son abrojos? ¿Lo sabéis? Pues no, ...