viernes, 6 de noviembre de 2009

EclEmma: Visualizar la cobertura de los tests unitarios en Eclipse

Hace algún tiempo publiqué un post sobre herramientas de calidad del código. A las que yo publiqué, Dirty Affairs añadió otra, EclEmma, a la cual he estado echando un vistazo.

EclEmma es una herramienta para Eclipse que permite visualizar la cobertura del código de los tests unitarios que hemos hecho. Existen otras herramientas como Cobertura, que generan informes, pero que no permiten visualizar esta informacuón de forma gráfica directamente en Eclipse.

EclEmma se instala en Eclipse de forma sencilla, desde Help -> Software Updates -> Available Software -> Add Site, se añade el sitio http://update.eclemma.org/ y pasamos a realizar la instalación del plugin.

Una vez instalado el plugin y reiniciado Eclipse, aparece una nueva opción en la barra de herramientas:

A través de este botón, podemos lanzar los tests de forma que EclEmma analizará qué parte del código se está cubriendo en ellos. Veamos un ejemplo práctico.

He creado una clase OperadorAritmético, que realiza las operaciones de suma y division:
package com.roldan.tests;

public class OperadorAritmetico {

public static int suma(int a, int b) {
return a + b;
}

public static int division(int a, int b) throws Exception {
if(b==0) {
throw new Exception();
}
return a / b;
}
}

Para probar esta clase he creado una clase de test que, en principio, solo prueba la suma:
package com.roldan.tests;

import org.junit.Assert;
import org.junit.Test;

public class OperadorAritmeticoTest {

@Test
public void suma() {

int a = 5;
int b = 3;

int suma = OperadorAritmetico.suma(a, b);

Assert.assertEquals(8, suma);
}
}

Ahora lanzamos las pruebas para el proyecto, sitándonos en la raíz del proyecto y yendo al botón de EclEmma antes mostrado, seleccionamos la opción Coverage as -> JUnit Test:

Vemos como las instrucciones de la clase OperadorAritmetico has sido coloreadas, con verde aquellas que han sido cubiertas en las pruebas y con rojo aquellas que no. La pestaña Coverage muestra el informe de cobertura del proyecto.

Ahora queremos arreglar un poco esta situación y hacer un prueba para la división:
@Test
public void division() {

int a = 8;
int b = 4;

int division;
try {
division = OperadorAritmetico.division(a, b);
Assert.assertEquals(2, division);
} catch (Exception e) {
Assert.fail();
}
}

Si ahora volvemos a realizar las pruebas, vemos que la situación se ha mejorado, aunque todavía queda código sin cubrir:

De esta forma, podemos ir mejorando progresivamente la cobertura de las pruebas para asegurar el buen funcionamiento de nuestro código.

Referencias:
http://tratandodeentenderlo.blogspot.com/2009/10/herramientas-de-analisis-de-calidad-del.html
http://www.eclemma.org/
http://cobertura.sourceforge.net/

1 comentario: