martes, 11 de junio de 2013

JUnit en Eclipse. Pruebas Unitarias en Java (ejemplo sencillo)

Documento sin título










Una prueba unitaria según Wikipedia es “una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado.”. Para algunos, este tipo de pruebas es una pérdida de tiempo o una inutilidad. Hay que decir que crear las pruebas supone un tiempo adicional al que dedicamos a programar la aplicación en sí. Debemos valorar si merece la pena o no, según las dimensiones y la complejidad de nuestro proyecto. Lo cierto es que si las hacemos, dependiendo del caso, podemos ahorrarnos mucho tiempo, ya que habremos automatizado las pruebas e instantáneamente sabremos si nuestra aplicación cumple con los resultados correctos. Mejoraremos la calidad del software, asegurándonos de que aunque hagamos cambios en nuestro código, cumpliremos con los requisitos esperados. En un futuro podremos modificar, ampliar o eliminar código y las pruebas unitarias seguirán sirviéndonos para realizar las comprobaciones pertinentes.


Para empezar, vamos a ver el ejemplo más simple posible, para que podamos centrarnos en la comprensión de lo que son las pruebas unitarias y de la herramienta para llevarlas a cabo: JUnit. El IDE que utilizaremos será Eclipse.



1. Empezaremos creando la clase que queremos probar. Tendrá el siguiente código:

public class Suma {

    private int num1;

   private int num2;

   public Suma(int n1, int n2) {
       num1 = n1;
       num2 = n2;
   }
   public int sumar() {
       int resultado = num1 + num2;
       return resultado;
   }
}

Como vemos, es una clase muy sencilla que dispone de un método que permite sumar dos números.

2. Lo siguiente es crear la clase que nos servirá para probar la clase Suma. Queremos saber si la suma se hace correctamente en tres casos: sumando dos números positivos, sumando dos números negativos y sumando un número positivo y un número negativo. El código será el siguiente:

public class SumaTest {

   @Test
   public void sumaPositivos() {
      System.out.println("Sumando dos números positivos ...");
       Suma S = new Suma(2, 3);
       assertTrue(S.sumar() == 5);
   }

   @Test
   public void sumaNegativos() {
       System.out.println("Sumando dos números negativos ...");
       Suma S = new Suma(-2, -3);
       assertTrue(S.sumar() == -5);
   }

   @Test
   public void sumaPositivoNegativo() {
       System.out.println("Sumando un número positivo y un número negativo ...");
       Suma S = new Suma(2, -3);
       assertTrue(S.sumar() == -1);
   }
} 


3. Activamos la vista “JUnit” en Eclipse. Para ello hay que pulsar en: “Window”; “Show View”; “Other...”; “Java”; “JUnit”.

4. Y ejecutamos el proyecto como test JUnit, pulsando sobre el proyecto con el botón derecho, luego pulsamos “Run as” y finalmente “JUnit Test”.
Ahora podremos ver los resultados. Si todo hay ido bien, en la vista JUnit nos aparecerá ésto: 



Si ha habido algún fallo nos aparecerá lo siguiente:


Como vemos, en el primer caso el test ha sido completado sin fallos. Sin embargo, en el segundo ejemplo (he modificado el código a conciencia para que falle) se ha encontrado un error en “sumaPositivoNegativo”.

Estamos ante un ejemplo poco práctico, por su simplicidad. Pero lo importante es comprender el concepto de pruebas unitarias y aprender a manejar JUnit dentro de Eclipse. Para obtener más información de cómo hacer los test, recomiento la lectura de la API de JUnit http://junit.sourceforge.net/javadoc/org/junit/package-summary.html .

Si tenéis alguna pregunta, podéis utilizar los comentarios.

 

Fuentes:




13 Comentarios:

Anónimo dijo...

Muy útil. Sólo faltaría que la clase SumaTest herede de TestCase para poder usar assertTrue

Felipe Martínez D. dijo...

Me alegro de que te sirviera y gracias por la recomendación.

Saludos.

Unknown dijo...

Ejemplo claro, resultado consistente. Muchas gracias por compartirlo.

Saludos
Agustín

Felipe Martínez D. dijo...

Hola Agustín.

Gracias a tí por comentar.

Saludos.

Santiago dijo...

Se entiende muy bien con un ejercicio así de sencillo
Muchas gracias, me sirvio para entender como hacer las pruebas!

Felipe Martínez D. dijo...

Hola Santiago.

Me alegro de que te sirviera.

Saludos.

Unknown dijo...

Es el ejemplo mas básico donde me ha quedado mas claro el Junit Muchas Gracias

Felipe Martínez D. dijo...

Hola Andrés, me alegro de que te sirviera. Un saludo.

Anónimo dijo...

Hola.

He picado el código utilizando las librerías JUnit 4 de Eclipse LUNA y funciona perfectamente, luego no es necesario heredar de TestCase, sino simplemente importar de forma estática la clase que nos permitirá hacer uso de los métodos de validación:

import static org.junit.Assert.*;

assertTrue(sumador.sumar() == 5);


A continuación le he metido Spring para inyectar el objeto Sumador que queremos testear e igualmente todo funcionó bien:


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring/catalogo.xml")
public class SumadorTEST {


Fue mi primer ejercicio con JUnit y me ha ayudado mucho. Muchas gracias.

VW.

Felipe Martínez D. dijo...

Hola.

Me alegro de que te haya sido de ayuda.

Un saludo.

Shirley Beleño dijo...

Fácil de entender, es un ejercicio súper práctico.

Felipe Martínez D. dijo...

Hola Shirley, me alegro de que te sirviera. Un saludo.

Anónimo dijo...

Hola, al hacer botón derecho sobre el proyecto y hacer clic en “Run as”............. no me aparece la opción “JUnit Test” .....además me marca como errores de compilación todos los "@Test" y "assertTrue" del código de la clase SumaTest......

Publicar un comentario

Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO