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
-
Declaración de la Clase y Variables:
public class CalculadoraTest { private Calculadora calculadora; }
- Declaramos una clase de prueba
CalculadoraTest
y una variablecalculadora
que será utilizada en los tests.
- Declaramos una clase de prueba
-
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
.
- El método
-
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
.
- El método
-
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
ytestResta
son métodos de prueba anotados con@Test
. - Cada uno de estos métodos se ejecutará después de
setUp
y antes detearDown
.
- Los métodos
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
-
Inicialización en
setUp
:- Se crea una instancia de
Banco
y se deposita un saldo inicial de 1000 unidades antes de cada test.
- Se crea una instancia de
-
Limpieza en
tearDown
:- Se libera la instancia de
Banco
después de cada test.
- Se libera la instancia de
-
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.
Curso de JUnit
Módulo 1: Introducción a JUnit
Módulo 2: Anotaciones Básicas de JUnit
- Entendiendo @Test
- Usando @Before y @After
- Usando @BeforeClass y @AfterClass
- Ignorando Tests con @Ignore
Módulo 3: Aserciones en JUnit
Módulo 4: Tests Parametrizados
- Introducción a los Tests Parametrizados
- Creando Tests Parametrizados
- Usando @ParameterizedTest
- Tests Parametrizados Personalizados
Módulo 5: Suites de Tests
Módulo 6: Mocking con JUnit
Módulo 7: Características Avanzadas de JUnit
Módulo 8: Mejores Prácticas y Consejos
- Escribiendo Tests Efectivos
- Organizando el Código de Tests
- Desarrollo Guiado por Tests (TDD)
- Integración Continua con JUnit