
Listado 5. Registro de las invocaciones de los métodos del ciclo de vida de JUnit 5 (LifecycleDemoTest.java)
package com.javaworld.geekcap.lifecycle;
import org.junit.jupiter.api.*;
public class LifecycleDemoTest {
@BeforeAll
static void beforeAll() {
System.out.println("Connect to the database");
}
@BeforeEach
void beforeEach() {
System.out.println("Load the schema");
}
@AfterEach
void afterEach() {
System.out.println("Drop the schema");
}
@AfterAll
static void afterAll() {
System.out.println("Disconnect from the database");
}
@Test
void testOne() {
System.out.println("Test One");
}
@Test
void testTwo() {
System.out.println("Test Two");
}
}
El resultado de ejecutar esta prueba imprime lo siguiente:
Connect to the database
Load the schema
Test One
Drop the schema
Load the schema
Test Two
Drop the schema
Disconnect from the database
Como se puede ver en esta salida, el beforeAll El método se llama primero y puede hacer algo como conectarse a una base de datos o crear una estructura de datos grande en la memoria. A continuación, el beforeEach El método prepara los datos para cada prueba; por ejemplo, completando una base de datos de prueba con un conjunto de datos esperado. Luego se ejecuta la primera prueba, seguida de la afterEach método. Este proceso (beforeEach—> prueba—>afterEach) continúa hasta que se hayan completado todas las pruebas. Finalmente, el afterAll El método limpia el entorno de prueba, posiblemente desconectándose de una base de datos.
Antes de concluir esta introducción inicial a las pruebas con JUnit 5, le mostraré cómo usar etiquetas para ejecutar selectivamente diferentes tipos de casos de prueba. Las etiquetas se utilizan para identificar y filtrar pruebas específicas que desea ejecutar en diversos escenarios. Por ejemplo, puede etiquetar una clase o método de prueba como prueba de integración y otro como código de desarrollo. Los nombres y usos de las etiquetas dependen de usted.
Crearemos tres nuevas clases de prueba y etiquetaremos dos de ellas como desarrollo y una como integración, presumiblemente para diferenciar entre las pruebas que desea ejecutar al compilar para diferentes entornos. Los listados 6, 7 y 8 muestran estas tres pruebas sencillas.
Listado 6. Etiquetas JUnit 5, prueba 1 (TestOne.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Development")
class TestOne {
@Test
void testOne() {
System.out.println("Test 1");
}
}
Listado 7. Etiquetas JUnit 5, prueba 2 (TestTwo.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Development")
class TestTwo {
@Test
void testTwo() {
System.out.println("Test 2");
}
}
Listado 8. Etiquetas JUnit 5, prueba 3 (TestThree.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Integration")
class TestThree {
@Test
void testThree() {
System.out.println("Test 3");
}
}
Las etiquetas se implementan mediante anotaciones y puede anotar una clase de prueba completa o métodos individuales en una clase de prueba; Además, una clase o un método pueden tener varias etiquetas. En este ejemplo, TestOne y TestTwo están anotados con el “Development” etiqueta, y TestThree está anotado con la “Integration” etiqueta. Podemos filtrar ejecuciones de prueba de diferentes maneras según las etiquetas. El más simple de ellos es especificar una prueba en su línea de comando Maven; por ejemplo, lo siguiente solo ejecuta pruebas etiquetadas como “Development”:
mvn clean test -Dgroups="Development"
El groups La propiedad le permite especificar una lista separada por comas de nombres de etiquetas para las pruebas que desea que ejecute JUnit 5. Al ejecutar esto se obtiene el siguiente resultado:
(INFO) -------------------------------------------------------
(INFO) T E S T S
(INFO) -------------------------------------------------------
(INFO) Running com.javaworld.geekcap.tags.TestOne
Test 1
(INFO) Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 s - in com.javaworld.geekcap.tags.TestOne
(INFO) Running com.javaworld.geekcap.tags.TestTwo
Test 2
(INFO) Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s - in com.javaworld.geekcap.tags.TestTwo
Asimismo, podríamos ejecutar solo las pruebas de integración de la siguiente manera:
mvn clean test -Dgroups="Integration"
O bien, podríamos ejecutar pruebas tanto de desarrollo como de integración:
mvn clean test -Dgroups="Development, Integration"
Además de la groups propiedad, JUnit 5 le permite utilizar un excludedGroups propiedad para ejecutar todas las pruebas que no tienen la etiqueta especificada. Por ejemplo, en un entorno de desarrollo no queremos ejecutar las pruebas de integración, por lo que podríamos ejecutar lo siguiente:
mvn clean test -DexcludedGroups="Integration"
Esto resulta útil porque una aplicación grande puede tener literalmente miles de pruebas. Si quisiera crear esta diferenciación ambiental y agregar algunas pruebas de producción nuevas, no querría tener que volver atrás y agregar una “Development” etiqueta a las otras 10,000 pruebas.
Finalmente, puedes agregar estos mismos groups y excludedGroups campos a la surefire complemento en su archivo Maven POM. También puede controlar estos campos utilizando perfiles de Maven. Te animo a que revises el Guía del usuario de JUnit 5 para obtener más información sobre las etiquetas.
Conclusión
Este artículo presentó algunos de los aspectos más destacados de trabajar con JUnit 5. Le mostré cómo configurar un proyecto Maven para usar JUnit 5 y cómo escribir pruebas usando el @Test y @ParameterizedTest anotaciones. Luego presenté las anotaciones del ciclo de vida de JUnit 5, seguido de un vistazo al uso y los beneficios de las etiquetas de filtro.




