Code coverage con JaCoCo en Gradle

Antes que nada, hay que saber que corno mide la métrica de calidad llamada code coverage. Esta medida nos permite medir (je, medida que mide) el porcentaje de ejecución de nuestro código tras haber ejecutado un conjunto de pruebas o test.

Básicamente nos permite sacar dos conclusiones:

  1. Que es probable que necesitemos mas pruebas unitarias.
  2. Hay código en nuestro sistema o aplicación que nunca se va ha ejecutar y por lo tanto esta algo que podemos sacar.

No es necesario que el code coverage este al 100% ya que para poder alcanzar el total es necesario realizar pruebas que no sean necesarias y por lo tanto inútiles. Pero es verdad que cuanto mas cercano al 100% mejor. Por lo general en los equipos de trabajo se define un mínimo aceptable.

Ahora yendo al grano, como metemos el plugin en Gradle y la task para la generación del reporte.  Para activarlo agregamos la siguiente linea en el archivo de configuración build.gradle:

apply plugin: 'jacoco'

Con esto logramos activar el plugin. Esta posibilidad esta disponible a partir de la version 1.6 de Gradle. Ahora vamos al bife. Crearemos la task en el archivo build.gradle la cual va ha realizar el reporte propiamente dicho.

jacocoTestReport {
 reports {
 xml.enabled false
 csv.enabled false
 } 
 afterEvaluate {
 classDirectories = files(classDirectories.files.collect {
 fileTree(dir: it, exclude: 'com/myApp/ServiceApplication**')
 })
 }
 group = "Reporting"
 description = "Generate Jacoco coverage reports after running tests."
 additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}

Lo primero que le indicamos al reporte que no sea en formato xml o en cvs. Por lo tanto lo generara por defecto en formato html. Luego, le indicamos que después de evaluar los resultados de los test ignore una clase en particular, en este caso ServiceApplication. Hay que notar que siempre se debe terminar el archivo indicado o carpeta con dos asteriscos.

Finalmente el reporte lo podremos encontrar en la siguiente ubicación del proyecto: build/reports/jacoco/test/html/index.html.

Ejemplo simple de un reporte JaCoCo en html.