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

java -jar junit-platform-console-standalone-1.7.0.jar -cp . --scan-classpath

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.

© Copyright 2024. Todos los derechos reservados