lunes, 20 de octubre de 2008

JUnit 3.8.1 vs JUnit 4.x

JUnit es una herramienta que nos ayuda en uno de los procesos más abandonados en el desarrollo software, que es la fase de pruebas. Esta fase no suele hacerse como se debería, sino que se suelen hacer pruebas a la vez que vamos desarrollando nuestro software. Pues bien, es importante tener una fase de pruebas en todo desarrollo y esta herramienta nos hace esta tarea mucho más sencilla. De hecho existen metodologías basadas en pruebas de modo que diseñas las pruebas antes que el software y vas desarrollando supervisado a través de los test.

Bueno pues JUnit es una herramienta que desde que se publicó su versión 3.8.1 ha quedado un poco congelada. Pero recientemente el proyecto a vuelto a cobrar vida con las nuevas versiones 4.x. Estas nuevas versión introducen algunos conceptos nuevos y hacen uso de las anotaciones introducidas en la versión 1.5 de java.

A continuación, se listan las principales novedades de esta versión de JUnit respecto a versiones precedentes:
  • Es necesario utilizar la versión 5 de la JDK para ejecutar los tests.
  • Las clases de prueba no necesitan heredar de la clase junit.framework.TestCase.
  • Los métodos de inicialización y liberación pueden ser definidos con cualquier nombre siempre y cuando sean etiquetados adecuadamente con @Before y @After. Además puede existir más de un método de inicialización y liberación simultaneamente.
  • Los nombre de los métodos de prueba no necesitan contener el prefijo test, sin embargo es necesario que sean definidos con la etiqueta @Test, la cual permite ser utilizada con parámetros que enriquecen las posibilidades de la prueba.
  • Existe la posibilidad de declarar métodos de inicialización y liberación globales a la clase de pruebas mediante las etiquetas @BeforeClass y @AfterClass.
Y para terminar os pongo un mismo ejemplo desarrollado con las distintas versiones:

JUnit3.8.1

package pruebasSistemaSoftware.junit381;

import junit.framework.*;
import servidorEstadoTrafico.Registro;
import servidorEstadoTrafico.RegistroMalFormadoException;
import servidorEstadoTrafico.Tramo;

public class RegistroTest extends TestCase {

   private Registro m_registro;

   public void setUp(){
     String strCarretera ="M-40";
     String strHora="12:23:45";
     String strFecha="1/3/2007";
     String strClima="Nublado";
     String strObras = "No";

     m_registro = new Registro(strCarretera,strHora,strFecha,strClima,strObras);
     Tramo tramo1 = new Tramo("0","10","3","1","Retenciones","Sin accidentes");
     Tramo tramo2 = new Tramo("10","12","2","0","Retenciones","Sin accidentes");
     Tramo tramo3 = new Tramo("12","15","3","1","Retenciones","Sin accidentes");

     m_registro.anadirTramo(tramo1);
     m_registro.anadirTramo(tramo2);
     m_registro.anadirTramo(tramo3);
}

  public void tearDown(){

  }

  public void testComprobarFormato(){
     try{
         m_registro.comporbarFormato();
     } catch (RegistroMalFormadoException e){
       fail("Se ha originado una excepcion inesperada" + e.toString());
     }
  }

  public void testObtenerLongitud(){
     assertEquals(m_registro.obtenerLongitud(),10+2+3);
  }



JUnit 4.x

package pruebasSistemaSoftware.junit4.2;

import java.lang.*;
import java.util.*;

import org.junit.Test;
import org.junit.After;
import org.junit.Before;
import static org.junit.Assert.*;
import junit.framework.JUnit4TestAdapter;

import servidorEstadoTrafico.Registro;
import servidorEstadoTrafico.RegistroMalFormadoException;
import servidorEstadoTrafico.Tramo;

public class RegistroTest{

  private Registro m_registro;

  @Before public void inicializar(){
     String strCarretera = "M-40";
     String strHora="12:23:45";
     String strFecha="1/3/2007";
     String strClima="Nublado";
     String strObras = "No";

     m_registro = new Registro(strCarretera,strHora,strFecha,strClima,strObras);
     Tramo tramo1 = new Tramo("0","10","3","1","Retenciones","Sin accidentes");
     Tramo tramo2 = new Tramo("10","12","2","0","Retenciones","Sin accidentes");
     Tramo tramo3 = new Tramo("12","15","3","1","Retenciones","Sin accidentes");

     m_registro.anadirTramo(tramo1);
     m_registro.anadirTramo(tramo2);
     m_registro.anadirTramo(tramo3);

  }

  @After public void liberar(){
  }

  @Test(expected=RegistroMalFormadoException.class)
  public void comprobarFormato() throws RegistroMalFormadoException {
     m_registro.comprobarFormato();
  }

  @Test(timeout=1000)
  public void obtenerLongitud(){
    assertEquals(m_registro.obtenerLongitud(),10+2+3);
  }

}

Ejemplos extraidos del libro "Pruebas de Software y JUnit Un análisis en profundidad y ejemplos prácticos"

No hay comentarios: