Cobertura

De Dos Ideas.
Revisión del 18:19 20 oct 2010 de 201.251.182.130 (discusión) (project.properties)
Saltar a: navegación, buscar

Cobertura es una herramienta de Java libre para calcular el porcentaje de código accedido por las pruebas. Puede ser usada para identificar cuales partes de su código Java carece de cobertura de pruebas. Se basa en JCoverage.

Características

  • Se puede ejecutar desde Ant o desde linea de comando.
  • Instrumenta los bytecode de Java después que este ha sido compilado.
  • Puede generar reportes en HTML or XML.
  • Muestra el porcentaje de líneas y ramas cubiertas de cada clase, cada paquete, y en todo el proyecto.
  • Muestra el McCabe Complejidad Ciclomatica de cada clase, y el promedio de la Complejidad Ciclomatica para cada paquete y para todo el producto.
  • Puede ordenar los resultados en HTML por nombre de clase, porcentaje de líneas cubiertas, porcentaje de ramas cubiertas, etc. Y puede ordenar en forma ascendente o descendente.

Bug con JDK 1.6

Trabajando con la versión 1.8 de Cobertura y JDK 1.6 nos encontramos con el problema de escribir los datos de cobertura [(java.lang.IllegalStateException: Shutdown in progress) ], que se resuelve con la version 1.9.2. Por ahora, seguimos con 1.8 y JDK 1.5. Seguramente, en breve nos pongamos con la última versión estable de Cobertura.

Enconding

A partir de la versión 1.9 de cobertura se asume que todos los archivos java fueron guardados con el formato de codificación de caracteres UTF-8, en vez de usar la codificación por default de la computadora donde está corriendo cobertura. Además permite modificar dicho comportamiento, permitiendo configurar el formato de codificación que se desea, según el api de Charset.Esa configuación se setea en la tarea ant cobertura-report mediante el nuevo atributo "enconding" del tag cobertura-report como figura en el siguiente ejemplo:

<cobertura-report format="html" destdir="${coveragereport.dir}" srcdir="${src.dir}" encoding="ISO-8859-1" />

Tareas ant de un proyecto netbeans para generar reportes de cobertura y Junit con una sola corrida de test

project.properties

Definir las variables de Cobertura

build.instrumented.dir=${build.dir}/instrumented build.report.dir=${build.dir}/report build.report.cobertura.dir=${build.report.dir}/report-coverage

junitreport.report.dir=${build.report.dir}/report-test junitreport.project.test.classes=build/test/results

Agregar el path de la instrumentación a los classpath de compilación y corrida de test

javac.test.classpath=\

${javac.classpath}:\
${build.instrumented.dir}:\
${build.classes.dir}:\
${libs.junit_4.classpath}

run.test.classpath=\

${javac.test.classpath}:\
${build.instrumented.dir}:\
${build.test.classes.dir}:\
${file.reference.asm-3.0.jar}:\
${file.reference.asm-tree-3.0.jar}:\
${file.reference.cobertura.jar}:\
${file.reference.jakarta-oro-2.0.8.jar}:\
${file.reference.log4j-1.2.9.jar}

Agregar al classpath de corrida de los test los jars de bobertura

Download Cobertura (sitio web)

Netbeans-classpath.gif

Archivo build.xml del proyecto

Tareas para instrumentar las clases

<property environment="env"/> <taskdef classpath="cobertura.jar" resource="tasks.properties"/> <target name="-pre-compile-test">

<delete dir="${build.instrumented.dir}" />
<delete dir="${build.report.cobertura.dir}" />
<mkdir dir="${build.instrumented.dir}" />
<mkdir dir="${build.report.cobertura.dir}" />
<cobertura-instrument todir="${build.instrumented.dir}">
<fileset dir="${build.classes.dir}">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>

</target>

Tareas de generación de reportes

<target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">

<cobertura-report format="html" srcdir="${src.dir}" destdir="${build.report.cobertura.dir}"/>

<cobertura-report format="xml" srcdir="${src.dir}" destdir="${build.report.cobertura.dir}"/>

<delete file="cobertura.ser" />

<mkdir dir="${junitreport.report.dir}"/>

<delete>

<fileset dir="${junitreport.report.dir}" includes="*.xml"/>

</delete>

<taskdef name="junitreport" classpath="${junitreport.classpath}" classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator" />

<junitreport todir="${junitreport.report.dir}">

<fileset dir="${junitreport.project.test.classes}">
 <include name="TEST-*.xml" />
</fileset>
<report todir="${junitreport.report.dir}" />

</junitreport>

</target>

Ejecución tarea "test"

-pre-compile-test:

  [delete] Deleting directory D:\workspace\prueba-cobertura\build\cobertura-out

instr

  [delete] Deleting directory D:\workspace\prueba-cobertura\report\report-cover

age

   [mkdir] Created dir: D:\workspace\prueba-cobertura\build\cobertura-outinstr
   [mkdir] Created dir: D:\workspace\prueba-cobertura\report\report-coverage

[cobertura-instrument] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See C OPYRIGHT file [cobertura-instrument] Instrumenting 2 files to D:\workspace\prueba-cobertura\bu ild\cobertura-outinstr [cobertura-instrument] Cobertura: Saved information on 2 classes. [cobertura-instrument] Instrument time: 78ms

-compile-test-depend:

-do-compile-test:

-post-compile-test:

compile-test:

-pre-test-run:

-do-test-run:

   [junit] Testsuite: pruebacobertura.PruebaCoberturaTest
   [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0,187 sec
   [junit]
   [junit] Flushing results...
   [junit] Flushing results done
   [junit] Cobertura: Loaded information on 2 classes.
   [junit] Cobertura: Saved information on 2 classes.

test-report:

-post-test-run: [cobertura-report] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYR IGHT file [cobertura-report] Cobertura: Loaded information on 2 classes. [cobertura-report] Report time: 172ms [cobertura-report] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYR IGHT file [cobertura-report] Cobertura: Loaded information on 2 classes. [cobertura-report] Report time: 94ms [delete] Deleting: D:\workspace\prueba-cobertura\cobertura.ser [junitreport] Processing D:\workspace\prueba-cobertura\report\report-test\TESTS- TestSuites.xml to C:\Temp\null1151001524 [junitreport] Loading stylesheet jar:file:/D:/apache-ant-1.7.1/lib/ant-junit.jar !/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl [junitreport] Transform time: 359ms [junitreport] Deleting: C:\Temp\null1151001524

Reportes

Reportes-cobertura.gif


Ver también