En esta sección, aprenderemos sobre las anotaciones @Before y @After en JUnit. Estas anotaciones son fundamentales para preparar y limpiar el entorno de pruebas antes y después de cada test. Esto es especialmente útil cuando necesitas configurar un estado inicial o liberar recursos después de que un test se ha ejecutado.

¿Qué son @Before y @After?

  • @Before: Esta anotación se utiliza para marcar un método que debe ejecutarse antes de cada método de prueba (@Test). Es ideal para inicializar objetos, abrir conexiones, o cualquier otra configuración necesaria antes de ejecutar un test.
  • @After: Esta anotación se utiliza para marcar un método que debe ejecutarse después de cada método de prueba (@Test). Es útil para liberar recursos, cerrar conexiones, o cualquier otra limpieza necesaria después de ejecutar un test.

Ejemplo Práctico

Vamos a ver un ejemplo práctico para entender cómo funcionan estas anotaciones.

Código de Ejemplo

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class CalculadoraTest {

    private Calculadora calculadora;

    @Before
    public void setUp() {
        // Este método se ejecuta antes de cada test
        calculadora = new Calculadora();
        System.out.println("Configurando el entorno de prueba...");
    }

    @After
    public void tearDown() {
        // Este método se ejecuta después de cada test
        calculadora = null;
        System.out.println("Limpiando el entorno de prueba...");
    }

    @Test
    public void testSuma() {
        int resultado = calculadora.suma(2, 3);
        assertEquals(5, resultado);
    }

    @Test
    public void testResta() {
        int resultado = calculadora.resta(5, 3);
        assertEquals(2, resultado);
    }
}

Explicación del Código

  1. Declaración de la Clase y Variables:

    public class CalculadoraTest {
        private Calculadora calculadora;
    }
    
    • Declaramos una clase de prueba CalculadoraTest y una variable calculadora que será utilizada en los tests.
  2. Método setUp con @Before:

    @Before
    public void setUp() {
        calculadora = new Calculadora();
        System.out.println("Configurando el entorno de prueba...");
    }
    
    • El método setUp está anotado con @Before, lo que significa que se ejecutará antes de cada método de prueba.
    • Aquí, inicializamos la instancia de Calculadora.
  3. Método tearDown con @After:

    @After
    public void tearDown() {
        calculadora = null;
        System.out.println("Limpiando el entorno de prueba...");
    }
    
    • El método tearDown está anotado con @After, lo que significa que se ejecutará después de cada método de prueba.
    • Aquí, liberamos la instancia de Calculadora.
  4. Métodos de Prueba:

    @Test
    public void testSuma() {
        int resultado = calculadora.suma(2, 3);
        assertEquals(5, resultado);
    }
    
    @Test
    public void testResta() {
        int resultado = calculadora.resta(5, 3);
        assertEquals(2, resultado);
    }
    
    • Los métodos testSuma y testResta son métodos de prueba anotados con @Test.
    • Cada uno de estos métodos se ejecutará después de setUp y antes de tearDown.

Ejercicio Práctico

Ejercicio

Crea una clase de prueba para una clase Banco que tenga métodos para depositar y retirar dinero. Usa las anotaciones @Before y @After para inicializar y limpiar el estado del objeto Banco.

Solución

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class BancoTest {

    private Banco banco;

    @Before
    public void setUp() {
        banco = new Banco();
        banco.depositar(1000);
        System.out.println("Configurando el entorno de prueba...");
    }

    @After
    public void tearDown() {
        banco = null;
        System.out.println("Limpiando el entorno de prueba...");
    }

    @Test
    public void testDepositar() {
        banco.depositar(500);
        assertEquals(1500, banco.getSaldo());
    }

    @Test
    public void testRetirar() {
        banco.retirar(200);
        assertEquals(800, banco.getSaldo());
    }
}

Explicación de la Solución

  1. Inicialización en setUp:

    • Se crea una instancia de Banco y se deposita un saldo inicial de 1000 unidades antes de cada test.
  2. Limpieza en tearDown:

    • Se libera la instancia de Banco después de cada test.
  3. Métodos de Prueba:

    • testDepositar verifica que el saldo se actualiza correctamente después de un depósito.
    • testRetirar verifica que el saldo se actualiza correctamente después de una retirada.

Conclusión

Las anotaciones @Before y @After son herramientas poderosas en JUnit que te permiten preparar y limpiar el entorno de pruebas de manera eficiente. Esto asegura que cada test se ejecute en un estado controlado y predecible, lo que es crucial para obtener resultados de prueba confiables.

En la siguiente sección, exploraremos las anotaciones @BeforeClass y @AfterClass, que se utilizan para configurar y limpiar el entorno de pruebas a nivel de clase.

© Copyright 2024. Todos los derechos reservados