TestNG es una herramienta de ejecución (y reporte de resultado) de pruebas unitarias. Esta herramienta ofrece una serie de opciones de configuración que permiten un control exhaustivo sobre la ejecución de las pruebas. En ocasiones necesitamos que las pruebas se ejecuten en un cierto orden, primero la carga de contenidos, recuperación, seguido de actualización de los mismos y por último borrado. Estas operaciones claramente requieren orden en su ejecución. JUnit, herramienta por excelencia para ejecución de pruebas unitarias, no ofrece ninguna opción al tester para mantener este orden. Vamos a ver como hacerlo con TestNG y como integrarlo en un proyecto Maven:
Configurar el pom para usar el plugin de TestNG:
…
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.7</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>
…
Configurar TestNG: agruparemos nuestras pruebas en grupos lógicos en el fichero testng.xml en el directorio /src/test/config.
<groups>
<define name=”root”>
<include name=”creacion” />
<include name=”recuperacion” />
<include name=”actualizacion” />
<include name=”borrado” />
</define>
<run>
<include name=”root” />
</run>
</groups>
Anotaciones en las clases de test: mediante anotaciones (Java 1.5) indicaremos a que grupos pertenece cada test y de qué grupos depende se ejecución.
@Test(groups = { "recuperacion", "root" }, dependsOnGroups = { "creacion" } )
public void recuperaEntidad1() {
...
Con esta anotación indicamos a TestNG que ejecute esta prueba despues de ejecutar todas las pruebas que pertenecen al grupo “creacion”.
Si queremos agrupar los reportes de las pruebas en un maven site podemos usar el plugin “maven-surefire-report”.
Aquí hay un pom.xml básico y un testng.xml de ejemplo.
Además del orden de las pruebas hay otros aspectos que típicamente se debe plantear un tester, como la decisión de usar una base de datos en ficheros para las pruebas o, por el contrario, usar la base de datos de desarrollo (base de datos real de la aplicación probada). Esta decisión depende en gran parte del tipo de proyecto. Si se trata de un proyecto en cuyo entorno de despliegue/producción disponemos de una base de datos contra la que podemos hacer las pruebas sin ningún tipo de restricción (tenemos permisos para hacer cualquier cosa), entonces lo mejor es hacer las pruebas contra la base de datos real, de esta forma probamos, además del funcionamiento “unitario” de nuestra aplicación, el link con la base de datos. En caso contrario, tenemos restricciones importantes sobre la base de datos, entonces ejecutaremos las pruebas sobre una base de datos en ficheros o memoria.


3 respuestas hasta el momento ↓
Manuel Jesús Recena Soto // 21 Junio 2008 a 11:24 am |
Hola Antonio:
He visto el pom.xml y comentarte un par de detatales:
- El formato de tabulación está “mezclado”, se usa tanto el carácter tabulador como espacios.
- Falta el groupId.
Prefiero usar esta [1] plantilla para mis archivos pom.xml. Si hay secciones que no aplican, las dejo vacías.
Son detalles “tontos”, pero ahí están ;)
Un saludo
[1] http://www.manuelrecena.com/blog/archives/113
amunizmartin // 21 Junio 2008 a 1:15 pm |
Pues si. Creo que ha sido por que no he usado un editor adecuado. TextWrangler no es la mejor opción ;)
Lo del groupId ha sido un lapsus. Lo corregiré.
Procesos de integración continua en Java « Blog de Antonio Manuel Muñiz // 2 Julio 2008 a 12:31 am |
[...] En segundo lugar, la ejecución de las pruebas unitarias, indispensables en cualquier proyecto el que se sigue un proceso de QA básico. Segundo “build”, ejecución de pruebas unitarias. [...]