Monday, 23 February 2009

Realizar pruebas unitarias con JUnit en Java

Para poder realizar correctamente las pruebas unitarias de nuestras clases, debemos utilizar los JUnit, que nos permiten evaluar si el comportamiento de los métodos de nuestra clase son correcto o no. JUnit son un conjunto de bibliotecas creadas por Erich Gamma y Kent Beck, estas las podemos encontrar en la página principal de JUnit.

  • Descargando las librerias:
Podemos descargar desde aquí la última libreria jUnit-4.x.jar
Descargamos la utilidad T2 del framework T2-jar version x.x.x.x.jar

Descargamos estas librerias y las copiamos dentro de la carpeta pluggins del Eclipse. Yo en principio las dejo aquí, también las podemos dejar en otra ubicación, siempre teniendo en cuenta que el Eclipse las tendrá que utilizar.

  • Creando un proyecto de ejemplo y cargar las librerias:
Seleccionamos las propiedades del proyecto, y añadimos JARs externos:



Ahora, generamos una nueva clase llamada ThingTeste.java, y haremos que herede de TestCase de JUnit. Una vez tenemos hecha la clase, creamos los métodos que queremos probar, y mediante un assert haremos que el sistema valide.
En este caso el código seria el siguiente:



import java.io.File;
import junit.framework.*;

public class ThingTester extends TestCase
{
public ThingTester (String name)
{
super (name);
}

public void testGetName() throws Exception
{
File myFile = new File("c:\file.txt");
assertEquals("file1.txt", myFile.getName());

}
}
---------------------

import org.junit.Test;

public class MyTest {

@Test
public void test1() {
// llamamos a T2 y le pasamos el nombre de nuestra clase:
Sequenic.T2.Main.Junit(ThingTester.class.getName());
}
}

Una vez tenemos las 2 clases creadas, arrancamos la clase MyTest.java como JUnit:



Una vez lo tenemos arrancado, podemos comprobar las pruebas unitarias desde la herramienta de JUnit:





Podemos comprobar como falla la validación de la unidad, y nos informa de donde está el error. Mediante la herramienta T2, no hace falta que creemos los métodos de comprobación, ya que el própio framework se encarga de ir a buscar los métodos de la clase y ponerlos a prueba. Podemos generar los métodos de prueba mediante la segunda opción que comento a continuación.

  • Creando un JUnit Test Case
Si en vez de generar la clase de la anterior forma, queremos generar nuestra clase y a la vez una clase Test, lo podemos hacer creandola de esta manera:

En el IDE de Eclipse, nos dirigimos a File -> New -> JUnit Test Case, y desde allí generamos una nueva clase de test para una clase existente.

En mi caso, genero una clase nueva, por ejemplo Rectangle.java:





public class Rectangle {
// State variables.
private int height;
private int width;

// Constructors
Rectangle() {
height = 0;
width = 0;
}

Rectangle(int h, int w) {
height = h;
width = w;
}

// Readers
public int getH() {
return height;
}

public int getW() {
return width;
}

public int getA() {
return height * width;
}

// Writers
public void setH(int h) {
height = h;
}

public void setW(int w) {
width = w;
}

public String toString() {
return "Rectangle: height=" + height + "; width=" + width + "; area=" +
getA() + ".";
}
}
// End of Rectangle class



Una vez tenemos la clase creada, desde el IDE de Eclipse:




Desde esta unidad de test, creamos un Objeto Rectangle, y desde ahí generamos todas las pruebas unitarias que queramos:



Podemos ver desde la herramienta del JUnit como han pasado los diferentes test sobre la clase Rectangle.java.

1 comment:

  1. Esto es una cosa que vale mucho la pena dedicar algunas horas. En el futuro un proyecto de pruevas te puede quitar de muchos apuros.

    ReplyDelete