Las pruebas Unitarias prueban una sola funcionalidad del proyecto. Por ejemplo si nuestro programa es una calculadora, se podría generar una prueba para cada operación o función que ésta realiza es decir una prueba unitaria para la suma, resta, división y multiplicación, y su vez cada prueba podría probar un set de datos y validar casos esperados y de borde.

Existen diferentes componentes que permiten realizar pruebas unitarias como por ejemplo Junit o TestNG, a modo de ejemplo en este tutorial utilizaremos Junit.

Para realizar pruebas unitarias con JUnit y Maven se deben seguir los siguientes pasos:

Agregar la dependencia de JUnit al pom.xml

Por defecto los arquetipos de Maven ya traen la dependencia para Junit, en caso de no tenerla se debe agregar lo siguiente en el pom.xml.

pom.xml

<dependencies>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>

</dependencies>

Por defecto cuando uno usa un arquetipo en el directorio ‘src’ existe una carpeta llamada ‘test’ y un archivo java llamado ‘AppTest,java’ de prueba (Si no existe hay que crearlos) (AppTest es un nombre de ejemplo).


Crear una prueba unitaria

Sobre el proyecto “New -> other -> junit”

4. Configurar el caso de prueba:

  • soruceFolder:  proyecto/src/test/java
  • package: org.engineering.proteyecto.test
  • name: Nombre de la prueba

Por defecto se creará una clase para la prueba unitaria que extiende de ‘TestCase’.

El código generado por defecto corresponde a la forma de codificar pruebas unitarias usada en JUnit3 (aun soportada en JUnit4) ,  para escribir la prueba bajo el formato de JUnit4 remplazaremos el código por defecto y en vez de extender la clase  desde TestCase usaremos @Test sobre el método que realizará la prueba.

La estructura de una prueba unitaria bajo el formato de JUnit4 será similar a la siguiente:

Public class TestNombre{

    

    @Test

     public void nombre_de_la_prueba(){

            Assert.assertEquals( valorEsperado, MetodoUno( entrada1, entrada2 , etc) );

     }


}

A tener presente: A la hora de implementar las pruebas con JUnit utilizaremos dos elementos básicos:

  • Por un lado, marcaremos con la anotación @Test los métodos que queramos que JUnit ejecute . Estos serán los         métodos en los que implementemos nuestras pruebas. En estos métodos llamaremos al método probado y comprobaremos si el resultado obtenido es igual al esperado.
  • Para comprobar si el resultado obtenido coincide con el esperado utilizaremos los métodos assert de la librería     JUnit. Estos son una serie de métodos estáticos de la clase Assert (para simplificar el código podríamos hacer un      import estático de dicha clase), todos ellos con el prefijo assert-. Existen multitud de variantes de estos métodos, según el tipo de datos que estemos comprobando (assertTrue assertFalse, assertEqualsassertNull etc). Las llamadas a estos métodos servirán para que JUnit sepa qué pruebas han tenido éxito y cuáles no.


Programación de la prueba unitaria – Ejemplo

Para el ejemplo tendremos una clase que calcula comisiones, recibiendo el monto bruto y el porcentaje de la comisión (10 => 10% , 1 => 1%, etc).

La clase comisión sera la siguiente:

Comision.java

package org.engineering.proyectDemo.negocio;

import java.io.IOException;

public class Comision {

float monto_bruto;
float comision_valor;

public Comision(float monto_bruto, float comision) throws NumberFormatException, IOException{
this.comision_valor=monto_bruto*((float)comision/100);
}

public int get_comision(){
return (int)this.comision_valor;
}

}

 

A la hora de implementar las pruebas con JUnit deberemos seguir una serie de buenas prácticas que se detallan a continuación:

  • La clase de pruebas se llamará igual que la clase a probar, pero con el sufijo -Test. Por ejemplo, si queremos  probar la clase MiClase, la clase de pruebas se llamará MiClaseTest.
  • Los métodos de prueba (los que están anotados con @Test), tendrán como nombre el mismo nombre que el del método  probado, pero con prefijo test-. Por ejemplo, para probar miMetodo tendríamos un método de prueba llamado   testMiMetodo.
    • Aunque dentro de un método de prueba podemos poner tantos assert como queramos, es recomendable crear un método  de prueba diferente por cada caso de prueba que tengamos. Por ejemplo, si para miMetodo hemos diseñado tres casos de prueba, podríamos tener tres métodos de prueba distintos: testMiMetodo1, testMiMetodo2, y testMiMetodo3. De esta forma, cuando se presenten los resultados de las pruebas podremos ver exactamente qué caso de prueba es el que ha fallado.

    TestComision.java

    package org.engineering.proyectDemo;

    import java.io.IOException;

    import org.junit.Test;

    import org.engineering.proyectDemo.negocio.Comision;

    import junit.framework.Assert;

    public class TestComision {

    private int monto_bruto=150000;

    @Test
    public void test_get_comision() throws IOException{

    Comision c = new Comision(this.monto_bruto, 10);
    Assert.assertEquals(15000, c.get_comision());
    }

    }


    Ejecución de la prueba

    • mvn -Dtest=TestComision test
    • Desde Eclipse “Run As -> Maven build…” Goals : “ -Dtest= TestComision test 


    Referencias