A la hora de ir haciendo las muy útiles pruebas unitarias para ir verificando que el código funciona correctamente, existen múltiples posibilidades para tratar este tema.

Por un lado están las pruebas de caja negra (ejecución de tests, digamos) y por el otro, las de caja blanca (cubrir todas las líneas de código implementadas).

JUnit

Con esta herramienta realizamos las pruebas. Tan simple como seguir el manual de la propia página o cookbok.

ECLEmma

Gracias al plugin para Eclipse, se consigue averiguar la cobertura de código que se realiza con los tests. De esta forma, se consiguen unas pruebas más completas.

Creando el script en Ant

Al añadir a Ant las líneas adecuadas para la ejecución de pruebas de manera automática, se ha optado por usar Cobertura. De esta manera, se automatiza el proceso de cobertura fácilmente.

El proceso consiste en añadir en Ant las librerías de cobertura y después, especificar varias opciones. Todo este proceso se explica adecuadamente, a mi parecer, en la propia página de Cobertura.

En nuestro caso, esta parte quedaría así:

<path id="cobertura.classpath">
   <fileset dir="${cobertura.dir}">
   <include name="cobertura.jar" />
   <include name="lib/**/*.jar" />
   </fileset>
 </path>

Luego entre las opciones a especificar:

<!-- =================================

	target: instrument

 ================================= -->

	<target name="instrument"

		description="Crea las clases de instrumentación para generar la cobertura"

		depends="init.instrument">

		

		<!-- Se eliminan los ficheros de ejecuciones anteriores -->

		<delete file="cobertura.ser" />

		<delete dir="${build.instrumented.dir}" />

		

		<cobertura-instrument todir="${build.instrumented.dir}">

	    	<fileset dir="${build.dir}/classes">

	        	<include name="**/*.class" />

	    	    <exclude name="**/*Test.class" />

		    </fileset>

		</cobertura-instrument>

	</target>

	

<!-- =================================

	target: test

 ================================= -->

	<target name="test" depends="init,compile,instrument" description="Ejecuta las pruebas de cobertura. Para ello es necesario

		tener ejecutando el motor de MySQL y Matlab.">

		<junit fork="yes" dir="${basedir}" failureProperty="test.failed">

	    	<classpath location="${build.instrumented.dir}"/>

	    	<classpath location="${build.classes.dir}"/>

			<classpath location="${build.dir}"/>

			<classpath refid="sql.classpath" />

			

			<formatter type="xml"/>

			<classpath refid="cobertura.classpath" />

			

			<formatter type="xml" />

			<test name="${testcase}" todir="${report.junit.dir}" if="testcase"/>

		

			<batchtest todir="${junit.xml.dir}" unless="testcase">

				<fileset dir="${test.dir}">

					<include name="**/*.java"/>

				</fileset>

			</batchtest>

		</junit>

		

		<junitreport todir="${junit.xml.dir}">

			<fileset dir="${junit.xml.dir}">

				<include name="TEST-*.xml"/>

			</fileset>

			<report format="frames" todir="${junit.html.dir}" />

		</junitreport>

	</target>

	

<!-- =================================

	target: coverage-check

 ================================= -->

	<target name="coverage-check" depends="" description="Comprueba que las pruebas de cobertura están en un intervalo especificado">

			<cobertura-check branchrate="35" totallinerate="100" />

	</target>

	

<!-- =================================

	target: coverage-report

 ================================= -->

	<target name="coverage-report" depends="test" description="Crea un informe html con la cobertura de las pruebas">

		<cobertura-report destdir="${cobertura.html.dir}">

		   <fileset dir="${src.dir}">

		       <include name="**/*.java" />

		       <exclude name="**/*Stub.java" />

		   </fileset>

		</cobertura-report>

	</target>

	

<!-- =================================

	target: coverage-report-xml

 ================================= -->

	<target name="coverage-report-xml" depends="coverage-report" description="Crea un informe xml con la cobertura de las pruebas">

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

	</target>
Advertisement