Saltar la navegación

a.3.- Assertions (afirmaciones).

En el apartado anterior se indica que las llamadas a los métodos de prueba son configurables en diferentes aspectos, tales como: qué hacer antes/después de cada prueba, cómo pasar parámetros a las llamadas o cómo repetir de forma automática un determinado test. Pero en realidad, no hemos lanzado prueba alguna a los métodos del código del proyecto implementado en la clase ClaseUnoJUnit.

JUnit utiliza la clase Assertions para lanzar los test, que básicamente está compuesta por una serie de métodos, que una vez llamados ejecutan los métodos a probar y analizan su comportamiento comparándolos con los resultados que se espera de ellos.

Así, hay métodos que nos permiten comprobar si dos valores son o no iguales, si el valor del parámetro pasado se puede resolver como true o false, si el tiempo consumido en ejecutar un método supera el previsto, etc.

Además, los métodos están sobrecargados, permitiendo en algunos casos indicar el mensaje que ha de devolver si la comprobación no resulta exitosa, o definir un margen que valide dos números como iguales si su diferencia es inferior a dicha tolerancia .

Ahora vamos a ver los métodos que usaremos, disponibles en JUnit, todos se invocan con la clase Assert de forma estático. Los mas usados son:

  • assertEquals(resultado esperado, resultado actual): le pasamos el resultado que nosotros esperamos y invocamos la función que estamos testando.
  • assertNull(objeto): si un objeto es null el test sera exitoso.
  • assertNotNull(objeto): al contrario que el anterior.
  • assertTrue(condición): si la condición pasada (puede ser una función que devuelva un booleano) es verdadera el test sera exitoso.
  • assertFalse(condición):  si la condición pasada (puede ser una función que devuelva un booleano) es falsa el test sera exitoso.
  • assertSame(Objeto1, objeto2): compara las referencias de los objetos.
  • assertNotSame(Objeto1, objeto2): al contrario que el anterior.

Para entender mejor los métodos assert, se va a modificar la clase ClaseUnoJUnitTest nuevamente, sustituyendo los mensajes por pantalla que se mostraban en la sección anterior por llamadas assert que permitan probar los métodos de la clase ClaseUnoJUnit_.

Nuevo código de la ClaseUnoJUnitTest.java:

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import claseunojunit_.ClaseUnoJunit_;

/**
*
* @author Admin
*/
public class ClaseUnoJUnitTest {

ClaseUnoJunit_ calc;

public ClaseUnoJUnitTest() {
System.out.println("Llamando a la función constructora: ClaseUnoJUnitTest");
}

@BeforeClass
public static void setUpClass() {
System.out.println("Llamando a setUpClass, con la etiqueta @BeforeClass");

}

@AfterClass
public static void tearDownClass() {
System.out.println("Llamando a tearDownClass con la etiqueta @AfterClass");
}

@Before
public void setUp() {

System.out.println("Llamando a setUp con la etiqueta @Before");

calc=new ClaseUnoJunit_(4, 67);
}

@After
public void tearDown() {
System.out.println("Llamando a tearDown con la etiqueta @After");
}

// TODO add test methods here.
// The methods must be annotated with annotation @Test. For example:
//
// @Test
// public void hello() {}
@Test
public void testDevuelveTrue() {

System.out.println("Llamando a testDevuelveTrue con la etiqueta @Test");
}

public void testSuma() {

assertEquals(71, calc.suma());

}

@Test
public void tesResta()
{

assertEquals(-63, calc.resta());
}
@Test
public void texDividir()
{
ClaseUnoJunit_ calc=new ClaseUnoJunit_(100, 25);
// assertTrue(calc.dividir()==1);
assertEquals("Muy mal, ese no es el resultado de la división",4, calc.dividir());//Lanza ese mensaje si no cuadra
}

}

Ejecutamos dicha clase y vemos que el resultado de dicha ejecución es:

Captura de pantalla donde se muestra el proceso de prueba de JUnit.

Donde nos da información de que ha ejecutado los métodos que se le ha pedido. Y te confirma que el resultado era el que esperabas menos el de la división. Pusimos que tenia que devolver un 4 y devuelve un 0.

Al ver ese error, vamos a dicho método y comprobamos que efectivamente el método dividir está mal. Pusimos el operador "%" que da el resto de una división y había que haber puesto "/" que es el operador en Java que devuelve el cociente de una división.

Si corregimos ese fallo y volvemos a ejecutar el Test veremos que el resultado es este:

Captura de pantalla donde se muestra el proceso de prueba de JUnit.