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
