Cobertura es un plugin para Maven que nos permite obtener el porcentaje de líneas de código por las que han pasado los test unitarios. Después de generar la documentación con Maven -mvn site-, obtenemos un informe html en el que clase por clase y paquete por paquete nos da el porcentaje de cobertura de los test, es decir, el porcentaje de líneas de código por los que ha pasado el test. Si además con Maven generamos la documentación de los fuentes con el plugin jxr, podemos incluso ver nuestros fuentes java con las líneas por las que ha pasado el test marcadas en verde y en rojo las que no.
Lo tengo instalado y llevo usándolo desde bastante tiempo. No con intención de llegar al 100% de cobertura en los test, sino como un indicador de qué tal vamos con los test. Si hacemos muchos o pocos, etc. Tengo unos scripts que se lanzan automáticamente todas las noches, generando esta documentación y publicándola en web, junto con métricas PMD, javadocs, etc. De esta forma, todos los programadores tenemos disponible esta documentación actualizada a diario.
El plugin Cobertura estuvo funcionando muy bien hasta hace casi un año. Desde ese momento, sin saber por qué, empezó a dar 100% de cobetura en todas las clases y todos los paquetes, indpendientemente de que hubiera o no tests. Reconozco que soy un poco vago, pero después de casi un año me puse a investigarlo. Parece que es un bug de la versión 2.1 de cobertura, que lleva todo ese tiempo sin funcionar y que todavía no han resuelto. La solución ha sido sencilla, basta con poner en el pom.xml que queremos la versión 2.0 de Cobertura. Algo tan simple como añadir la línea
<version>2.0</version>
Con esto ya funcionó y obtuve nuevamente los resultados correctos. Por supuesto, me he dado de alta en la página esa de los bugs, he votado para que lo resuelvan y me he apuntado para que me avisen. No sé qué interés tengo en la versión 2.1 si la 2.0 me funciona, pero supongo que es un poco de cargo de conciencia por llevar un año sin preocuparme del tema.
Además, animado con el éxito de auto-resolver el bug -cambiando el número de versión-, me puse a investigar otro problema que tenía también con Cobertura:
Si en Maven tengo un proyecto A del que cuelgan dos subproyectos B y C, lo normal es que el "packaging" del proyecto A sea "pom" y los B y C, en mi caso, sea "jar". Es decir, el proyecto A no tiene fuentes y sólo sirve como "contenedor" o "padre" de los proyectos B y C. Una ventaja de organizar esto así, es que si ponemos algo en el pom.xml de A, automáticamente lo heredan los proyectos B y C. En el caso concreto de Cobertura, basta con poner en el pom.xml de A que queremos los informes de Cobertura para que se generen tanto los de B como los de C.
¡¡Pues primera en la frente!!. El hacerlo así y ejecutar mvn site, tenemos un error de Cobertura. Mi solución hasta ahora era copiar la configuración de Cobertura en los pom.xml de B y C y ejecutar mvn site individualmente en cada uno de ellos.
Revisando la página de bugs, veo que ese bug también está y además lo han resuelto un poco "de aquella manera". La solución es borrar, donde no hay fuentes, el directorio "java" de src/main/java. Si existe el directorio src/main/java, Cobertura da por supuesto que hay fuentes y si no las hay, da un error y no hace nada. Pues nada, nuestro amigo el comando "rm -rf", ese que borra tus directorios más importantes en un descuido, es el que me solucionó el problema.