lunes, enero 11, 2010

Usando Cobertura con TestNG

Como podemos leer su web, Cobertura es una herramienta que mide el porcentaje de líneas de código accedidas por los test. Esto no significa que un código este bien o mal testeado, lo que nos dice es que líneas de código ni siquiera están siendo testeadas.

Por internet podemos encontrar muchos ejemplos de como usar Cobertura con JUnit pero no hay tantos ejemplos de como usar Cobertura con Ant y TestNG (otro framework para testing muy extendido).

En resumen tenemos que hacer tres tareas: instrumentar las clases, correr los tests y generar el informe con los resultados. Vamos a ver un ejemplo:

<target name="instrument" depends="buildtest">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>

<mkdir dir="${deployCobertura.dir}" />

<delete file="cobertura.ser"/>
<delete dir="${deployCobertura.dir}/instrument" />

<cobertura-instrument todir="${deployCobertura.dir}/instrument" datafile="${deployCobertura.dir}/cobertura.ser">
<ignore regex="org.apache.log4j.*" />

<fileset dir="${test.dir}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
<exclude name="**/*Test$*.class" />
</fileset>
</cobertura-instrument>
</target>

<target name="coverage" depends="instrument">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>
<taskdef resource="testngtasks" classpath="${testng.jar}" />

<path id="test.path">
<path refid="cobertura.classpath" />
<path path="${deployCobertura.dir}/instrument" />
<path path="${test.dir}" />

<fileset dir="${lib.dir}/test">
<include name="*..jar"/>
</fileset>

<path path="${bootstrap.dir}" />
<path refid="build.classpath" />
</path>

<testng outputdir="${basedir}/test-report">
<sysproperty key="net.sourceforge.cobertura.datafile" file="${deployCobertura.dir}/cobertura.ser" />

<classpath refid="test.path" />

<xmlfileset dir="${test.dir}" includes="*Test.xml" />
</testng>
</target>

<target name="coverageAndReport" depends="coverage" description="Run cobertura and generate the report">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>

<cobertura-report format="html" datafile="${deployCobertura.dir}/cobertura.ser" destdir="${deployCobertura.dir}/html">
<fileset dir="${src.action.dir}">
<include name="**/*.java" />
<exclude name="**/*Stub.java" />
<exclude name="**/*Test.java" />
<exclude name="**/*Test$.java" />
</fileset>
</cobertura-report>
</target>

No hay comentarios:

Publicar un comentario