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