Cobertura de los test
Informe de cobertura de los test de JUnit[editar]
Un informe interesante es el que indica qué líneas de nuesto código se han ejecutado al ejecutar nuestros test. Lo deseable sería que un alto porcentaje de líneas de nuestro código hayan pasado por los test. Este tipo de informes se llaman informes de cobertura de los test.
maven cobertura plugin[editar]
Antiguamente este informe lo generaba maven-cobertura-plugin, pero ya no está soportado y ha sido reemplazado por jacoco-maven-plugin.
jacoco maven plugin[editar]
Para añadir este plugin, en nuestro fichero pom.xml debemos poner
<project>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- <execution>-->
<!-- <id>report</id>-->
<!-- <phase>prepare-package</phase>-->
<!-- <goals>-->
<!-- <goal>report</goal>-->
<!-- </goals>-->
<!-- </execution>-->
</executions>
</plugin>
...
</plugins>
...
</build>
...
</project>
El comando mvn jacoco:prepare-agent package genera un informe en binario en target/jacoco.exec. Este informe no nos vale porque no sabemos leerlo, pero es necesario para generar el informe en formato html que sí nos interesa. prepare-agent debe ejecutarse antes de package. Como es un paso que debemos dar sí o sí, lo hemos incluido en <executions>
en el pom.xml, como puedes ver en el ejemplo de arriba. Una vez hecho esto, no necesitamos ejecutar explícitamente el comando en nuestra línea maven.
mvn package jacoco:report
Este comando, genera el fichero binario target/jacoco.exec, el jar de nuestro proyecto y el informe html de los test. El resultado puede ser como el de la siguiente imagen
Vemos como barras de color, para cada uno de los paquetes de nuesto código, el porcentaje de líneas de código que han pasado por los test. En la imagen casi todo rojo, lo siento, no hago muchos test :) . Vemos que las clases del paquete com.chuidiang.ejemplos.semi_mazacote hay un 13% de cobertura de los test.
Navegando por el paquete aparecen las clases de ese paquete y seleccionando la clase, veremos los métodos y seleccionando cualquiea de los métodos, podemos ver el detalle de las líneas de código
Ves en verde las líneas por las que ha pasado el test y en rojo por las que no. En este caso, está en rojo el "constructor" sin parámetros, que no es visible, pero que está. Nos dice que nuestros tests no han hecho un new de la clase Calculator. Este informe es más vistoso con una clase más compleja, con condicionales, donde veremos si hemos pasado tanto por el if como por el else. O con un switch-case, donde veremos si hemos pasado por todos los case y el default.
Si quieres que el informe se genere siempre, sin llamar explícitamente a jacoco:report, bastaría con descomentar las líneas del pom.xml que hemos mostrado comentadas más arriba.