JUnit es un conocido framework para la escritura de pruebas unitarias. En esta sección sólo mostraré como incluir en los reportes de Hudson pruebas previamente creadas, este no es un tutorial sobre JUnit. Si aún no conoce el framework en su sitio web encotrará referencias y documentación para su uso.
El proyecto de ejemplo viene con un grupo de pruebas unitarias que puede verlas en el directorio test. Tambien tiene incluidas las librerías de JUnit y sólo es necesario programar una tarea con Ant para ejecutarlas.
A continuación una guía para ejecutar con ant las pruebas del proyecto de ejemplo e incluir su ejecución y reporte en la tarea de Hudson.
1. Crearemos una tarea llamada junit que compilará las pruebas unitarias, las ejecutará y generará un reporte en formato XML que posteriormente procesará Hudson.
2. Abra el proyecto de ejemplo y edite el archivo build.xml con un doble clic.
3. Al final del archivo agregue la siguiente tarea:
<target name = "junit" depends = "init"> <javac encoding = "ISO-8859-1" destdir = "${junit.build.dir}" classpathref = "lib.jarfiles" debug = "on" deprecation = "on" optimize = "on"> <src path = "${src.dir}" /> <src path = "${test.dir}" /> </javac> <junit fork="no" printsummary="no" haltonfailure="no" showoutput="true" filtertrace="false"> <classpath refid="lib.jarfiles" /> <classpath> <pathelement path = "${java.class.path}" /> <pathelement path = "${junit.build.dir}" /> </classpath> <batchtest todir="${junit.report.dir}"> <fileset dir="${junit.build.dir}"> <include name="org/farng/mp3/AllTestCase.class" /> </fileset> <formatter type="xml" /> </batchtest> </junit> </target>
La tarea está dividad en dos bloques: la compilación de las pruebas (javac) y la ejecución y generación del reporte (junit).
En la primera etapa se compilan el directorio de pruebas unitarias (${test.dir}) y el código fuente de la aplicación (${src.dir}), este último para resolver las dependencias que tienen con él las pruebas unitarias.
En la segunda etapa usamos el tag junit y le indicamos a través del classpath las ubicaciones de las librerías que requiere el proyecto (incluyendo las de JUnit) y la ubicación de las pruebas unitarias que ejecutará (junit.build.dir). Note que este último directorio debe coincidir con el destino (destdir) de la primera parte de la tarea (${junit.build.dir}).
Después con el tag batchtest realizamos la ejecución de la prueba. El parámetro todir indica donde deben ubicarse los reportes generados y con el tag formatter se define el formato.
Aunque son varias pruebas unitarias y archivos, todas se ejecutan con org/farng/mp3/AllTestCase.
4. El siguiente paso asignar rutas a los directorios que usa la tarea y agregarlas en los pasos de limpieza e inicialización.
5. Vaya a la sección del archivo donde se declaran las propiedades y agregue junit.build.dir y junit.report.dir con las siguientes líneas:
<property name = "junit.build.dir" value = "junitClasses" /> <property name = "junit.report.dir" value = "junitReport" />
Por ejemplo:
6. En la tarea init agregue la creación de los dos directorios con las siguientes líneas:
<mkdir dir = "${junit.build.dir}" /> <mkdir dir = "${junit.report.dir}" />
7. En la tarea clean agregue el borrado de los dos directorios con las siguientes líneas:
<delete failonerror = "false" dir = "${junit.build.dir}" /> <delete failonerror = "false" dir = "${junit.report.dir}" />
8. En este link puede ver el build.xml después de las modificaciones.
9. Abra una consola de comandos ubicada en el directorio del proyecto y ejecute con ant las tareas cleanall, jar y junit. El comando completo es ant cleanall jar junit. El resultado debe ser similar al mostrado en la siguiente imagen:
10. Si la ejecución por consola fue exitosa, suba la actualización al archivo build.xml al repositorio haciendo clic derecho sobre él y seleccionando la opción Commit.
11. Vaya ahora a Hudson e ingrese a la tarea BuildProyectoEjemplo y seleccione la opción Configurar.
12. En la sección Ejecutar Ant agregue al final la tarea junit para ejecutar las pruebas unitarias.
13. Vaya a la sección Acciones para ejecutar después y seleccione la opción Publicar los resultados de tests JUnit. En el campo Ficheros XML de informe de tests ingrese la ruta donde se almacena el reporte XML de las pruebas (ProyectoEjemplo/junitReport/*.xml). La ruta debe incluir el directorio principal del proyecto. Presione Guardar para finalizar.
14. Ejecute la tarea y vaya a la página de resultados.
15. Observe que ahora aparece un nuevo reporte indicando los resultados de las pruebas unitarias. Si es la primera vez que ejecuta la tarea desde la actualización del repositorio, también aparecerá un log indicando los cambios en el repositorio.
16. Seleccione el link Resultado de los tests para ver los resultados de las pruebas unitarias.
17. Observe que se muestran cada uno de los test que fallaron, un resumen de todos los tests, el tiempo, la antigüedad que es el número de builds en que se ha incluido la prueba, entre otros.
18. Seleccione uno de los test que falló y observe que Hudson muestra el log de la prueba y el detalle del error.
19. Ejecute de nuevo la tarea BuildProyectoEjemplo y vaya a la página principal de la tarea. Verá que ahora aparece un gráfico con la tendencia de las pruebas unitarias.
En el gráfico la sección roja indica la cantidad de pruebas que fallaron y la azul las pruebas exitosas. También se puede observar que el número de pruebas según el gráfico es un poco más de 120 y sólo un pequeño porcentaje falla (3 con exactitud).
20. Pruebe alterando algunas pruebas y observe los cambios en el gráfico de tendencia.
21. Si todo le resultó como se mostró en el taller, ya tiene un proyecto correctamente configurado para la compilación, construcción y ejecución de pruebas unitarias. Igualmente a medida que el proyecto cambie, agregue pruebas, estás se dañen o arregle las defectuosas verá como cambia el gráfico de tendencia y el ícono que indica el estado del proyecto.