¿Qué es JUnit 5?
JUnit 5 es la última versión del popular framework de pruebas unitarias para Java. Esta versión introduce una arquitectura modular y una serie de nuevas características que mejoran la flexibilidad y la extensibilidad del framework. JUnit 5 se compone de tres subproyectos principales:
- JUnit Platform: Proporciona la base para lanzar frameworks de pruebas en la JVM. Define el API para descubrir, filtrar y ejecutar pruebas.
- JUnit Jupiter: Contiene las nuevas anotaciones y el modelo de programación para escribir pruebas en JUnit 5.
- JUnit Vintage: Permite ejecutar pruebas escritas con versiones anteriores de JUnit (JUnit 3 y JUnit 4) en la plataforma JUnit 5.
Ventajas de JUnit 5
- Modularidad: La arquitectura modular permite usar solo los componentes necesarios.
- Extensibilidad: Facilita la creación de extensiones personalizadas.
- Compatibilidad: Permite ejecutar pruebas escritas en JUnit 3 y JUnit 4.
- Nuevas Anotaciones: Introduce nuevas anotaciones que simplifican la escritura de pruebas.
- Mejor Integración: Mejor integración con herramientas de construcción y entornos de desarrollo integrados (IDEs).
Configuración de JUnit 5
Para empezar a usar JUnit 5, necesitas agregar las dependencias necesarias a tu proyecto. Aquí te mostramos cómo hacerlo con Maven y Gradle.
Maven
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.8.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.1</version> <scope>test</scope> </dependency> </dependencies>
Gradle
Primer Test en JUnit 5
Vamos a escribir un simple test en JUnit 5 para familiarizarnos con la nueva sintaxis y las anotaciones.
Ejemplo de Código
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { @Test void addition() { Calculator calculator = new Calculator(); assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2"); } }
Explicación del Código
- @Test: Indica que el método
addition
es un método de prueba. - assertEquals: Verifica que el resultado de
calculator.add(1, 1)
sea igual a2
. Si no es así, la prueba fallará y mostrará el mensaje "1 + 1 should equal 2".
Ejercicio Práctico
Ejercicio: Escribe una prueba para un método subtract
en la clase Calculator
que reste dos números.
- Crea la clase
Calculator
con el métodosubtract
. - Escribe una prueba para el método
subtract
usando JUnit 5.
Solución:
public class Calculator { public int subtract(int a, int b) { return a - b; } } import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { @Test void subtraction() { Calculator calculator = new Calculator(); assertEquals(0, calculator.subtract(1, 1), "1 - 1 should equal 0"); } }
Retroalimentación
- Error Común: Olvidar importar las clases de JUnit. Asegúrate de importar
org.junit.jupiter.api.Test
yorg.junit.jupiter.api.Assertions
. - Consejo: Usa nombres descriptivos para tus métodos de prueba para que sea claro qué funcionalidad están verificando.
Conclusión
En esta sección, hemos introducido JUnit 5, sus ventajas y cómo configurarlo en tu proyecto. También hemos escrito nuestro primer test en JUnit 5 y proporcionado un ejercicio práctico para reforzar los conceptos aprendidos. En la siguiente sección, exploraremos la arquitectura de JUnit 5 en mayor detalle.
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