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.

  1. @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");
        });
    }
}

  1. @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
    }
}

  1. @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
    }
}

  1. @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
    }
}

  1. @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
        }
    }
}

  1. @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
    }
}

  1. @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
    }
}

  1. @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
    }
}

  1. @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.

© Copyright 2024. Todos los derechos reservados