Pruebas Unitarias con JUnit

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.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

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:

Pruebas unitarias con JUnit

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}" />
Pruebas unitarias con JUnit

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}" />
Pruebas unitarias con JUnit

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:

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

11. Vaya ahora a Hudson e ingrese a la tarea BuildProyectoEjemplo y seleccione la opción Configurar.

Pruebas unitarias con JUnit

12. En la sección Ejecutar Ant agregue al final la tarea junit para ejecutar las pruebas unitarias.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

14. Ejecute la tarea y vaya a la página de resultados.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

16. Seleccione el link Resultado de los tests para ver los resultados de las pruebas unitarias.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

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.

Pruebas unitarias con JUnit

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.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License