JUnit 5 es una reescritura completa de JUnit 4, diseñada para aprovechar las nuevas características de Java 8 y proporcionar una arquitectura más flexible y extensible. La arquitectura de JUnit 5 se basa en tres módulos principales: JUnit Platform, JUnit Jupiter y JUnit Vintage. A continuación, desglosamos cada uno de estos componentes y su papel en el ecosistema de JUnit 5.
JUnit Platform
JUnit Platform es la base sobre la cual se ejecutan los frameworks de pruebas. Proporciona la infraestructura necesaria para descubrir, filtrar y ejecutar pruebas. Aquí están los componentes clave de JUnit Platform:
- Launcher API: Permite a los clientes (como IDEs y herramientas de construcción) lanzar la ejecución de pruebas.
- TestEngine API: Define la interfaz que deben implementar los motores de pruebas para integrarse con JUnit Platform.
- Console Launcher: Una herramienta de línea de comandos para ejecutar pruebas desde la consola.
- JUnit Platform Suite Engine: Permite la ejecución de suites de pruebas que pueden incluir pruebas de diferentes motores.
Ejemplo de uso del Console Launcher
Este comando escanea el classpath en busca de pruebas y las ejecuta.
JUnit Jupiter
JUnit Jupiter es el nuevo modelo de programación y motor de pruebas para JUnit 5. Introduce nuevas anotaciones y una API más rica para escribir pruebas. Los componentes clave de JUnit Jupiter incluyen:
- Anotaciones: Nuevas anotaciones como
@Test,@BeforeEach,@AfterEach,@BeforeAll,@AfterAll,@DisplayName,@Nested,@Tag,@Disabled, entre otras. - Assertions: Nuevas y mejoradas aserciones para verificar el comportamiento del código.
- Assumptions: Permiten ejecutar pruebas condicionalmente.
- Dynamic Tests: Permiten generar pruebas dinámicamente en tiempo de ejecución.
Ejemplo de una prueba simple en JUnit Jupiter
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CalculatorTest {
@Test
void addition() {
Calculator calculator = new Calculator();
assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2");
}
}En este ejemplo, @Test indica que el método addition es una prueba, y assertEquals verifica que la suma de 1 y 1 es igual a 2.
JUnit Vintage
JUnit Vintage proporciona compatibilidad con versiones anteriores, permitiendo ejecutar pruebas escritas con JUnit 3 y JUnit 4 en JUnit 5. Esto es crucial para proyectos que tienen una gran base de código de pruebas existente y desean migrar gradualmente a JUnit 5.
Ejemplo de configuración de JUnit Vintage en un proyecto Maven
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>Esta dependencia permite ejecutar pruebas escritas con JUnit 3 y 4 utilizando JUnit 5.
Comparación de Componentes
| Componente | Descripción | Ejemplo de Uso |
|---|---|---|
| JUnit Platform | Infraestructura para descubrir, filtrar y ejecutar pruebas | java -jar junit-platform-console-standalone-1.7.0.jar -cp . --scan-classpath |
| JUnit Jupiter | Nuevo modelo de programación y motor de pruebas | @Test, @BeforeEach, @AfterEach, assertEquals |
| JUnit Vintage | Compatibilidad con pruebas escritas en JUnit 3 y 4 | <artifactId>junit-vintage-engine</artifactId> |
Conclusión
La arquitectura de JUnit 5, con su separación en JUnit Platform, JUnit Jupiter y JUnit Vintage, proporciona una base sólida y flexible para escribir y ejecutar pruebas. Esta estructura modular permite a los desarrolladores aprovechar las nuevas características de JUnit 5 mientras mantienen la compatibilidad con las pruebas existentes. En el próximo tema, exploraremos las nuevas anotaciones introducidas en JUnit 5 y cómo pueden mejorar la legibilidad y la organización de nuestras pruebas.
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
