JUnit 5 introduce varias nuevas anotaciones que mejoran la flexibilidad y la funcionalidad de los tests. Estas anotaciones permiten una mayor personalización y control sobre la ejecución de los tests. En esta sección, exploraremos las nuevas anotaciones más importantes y cómo utilizarlas.
- @Test
La anotación @Test
sigue siendo fundamental en JUnit 5, pero ha sido mejorada para soportar nuevas características como la especificación de excepciones esperadas y tiempos de espera.
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; public class ExampleTest { @Test void testException() { assertThrows(IllegalArgumentException.class, () -> { throw new IllegalArgumentException("Exception message"); }); } }
- @DisplayName
La anotación @DisplayName
permite definir nombres personalizados para los tests, lo que facilita la comprensión de los resultados de las pruebas.
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class DisplayNameTest { @Test @DisplayName("Test for addition operation") void testAddition() { // Test code here } }
- @BeforeEach y @AfterEach
Estas anotaciones reemplazan a @Before
y @After
de JUnit 4. Se utilizan para ejecutar métodos antes y después de cada test.
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class LifecycleTest { @BeforeEach void setUp() { // Code to set up test environment } @AfterEach void tearDown() { // Code to clean up after test } @Test void testExample() { // Test code here } }
- @BeforeAll y @AfterAll
Estas anotaciones reemplazan a @BeforeClass
y @AfterClass
de JUnit 4. Se utilizan para ejecutar métodos una vez antes y después de todos los tests en una clase.
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; public class ClassLifecycleTest { @BeforeAll static void initAll() { // Code to initialize resources } @AfterAll static void cleanUpAll() { // Code to clean up resources } @Test void testExample() { // Test code here } }
- @Nested
La anotación @Nested
permite agrupar tests dentro de clases internas, lo que facilita la organización y la estructura de los tests.
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class NestedTest { @Nested class InnerTest { @Test void testInner() { // Test code here } } }
- @Tag
La anotación @Tag
permite etiquetar tests para agruparlos y ejecutarlos selectivamente.
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; public class TagTest { @Test @Tag("fast") void fastTest() { // Fast test code here } @Test @Tag("slow") void slowTest() { // Slow test code here } }
- @Disabled
La anotación @Disabled
se utiliza para deshabilitar tests temporalmente.
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class DisabledTest { @Test @Disabled("Test is disabled until bug #123 is fixed") void testDisabled() { // This test will not run } }
- @RepeatedTest
La anotación @RepeatedTest
permite ejecutar un test varias veces.
import org.junit.jupiter.api.RepeatedTest; public class RepeatedTestExample { @RepeatedTest(5) void repeatedTest() { // This test will run 5 times } }
- @ParameterizedTest
La anotación @ParameterizedTest
permite ejecutar un test con diferentes valores de entrada.
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; public class ParameterizedTestExample { @ParameterizedTest @ValueSource(strings = {"Hello", "JUnit"}) void parameterizedTest(String word) { // Test code using the parameter 'word' } }
Conclusión
Las nuevas anotaciones en JUnit 5 proporcionan una mayor flexibilidad y control sobre la ejecución de los tests. Estas anotaciones permiten una mejor organización, personalización y parametrización de los tests, lo que facilita la creación de suites de pruebas más robustas y mantenibles.
En el siguiente tema, exploraremos cómo migrar de JUnit 4 a JUnit 5, aprovechando estas nuevas características y anotaciones.
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