4.1 @Deshabilitado
Ahora veamos algunas anotaciones muy útiles y populares del marco JUnit. La primera anotación le permite desactivar una prueba específica para que JUnit no la llame. Es necesario en los casos en que nota que la prueba no funciona correctamente, o cambia el código y la prueba se rompe accidentalmente.
Como escribí anteriormente, el 99% de las pruebas no son compatibles con nadie, por lo que tarde o temprano todas resultan deshabilitadas. Por lo tanto, esta anotación es la primera en la lista de útiles.
Considere su ejemplo:
public class AppTest {
@Disabled("Test is temporarily disabled. True, true") @Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
testOnDev()
En el ejemplo anterior, no se llamará al método . Por cierto, la anotación @Disabled
se puede escribir inmediatamente antes de la declaración de la clase, luego se ignorarán todos sus métodos.
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @Anidado
JUnit le permite llamar a métodos de prueba en clases anidadas. Me refiero a clases de prueba anidadas. No es un hecho que los encuentre a menudo, pero existe tal posibilidad, por lo que debe comprender de qué se trata.
Para llamar a los métodos de una clase anidada antes de su declaración, debe escribir una anotación @Nested
. Ejemplo:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
Se pueden encontrar más detalles en la documentación oficial .
4.3 @ExtenderCon
Otra anotación útil es @ExtendWith
. Lo más probable es que la conozcas muy a menudo, así que veámosla con más detalle.
JUnit es un marco poderoso que le permite escribir varios complementos (extensiones) para una personalización flexible de su trabajo. Algunas extensiones pueden recopilar estadísticas sobre las pruebas, otras pueden emular un sistema de archivos en memoria, otras pueden emular el trabajo dentro de un servidor web, etc.
Si su código se ejecuta dentro de un marco (por ejemplo, Spring), casi siempre este marco administra la creación y configuración de objetos en su código . Por lo tanto, es indispensable un complemento de prueba especial. Ejemplos:
Ejemplo 1. La extensión WebServerExtension
pasa al método de prueba llamado URL
para funcionar correctamente.
@Test @ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
Así es como las pruebas generalmente comienzan a probar el código que funciona con Spring Framework:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
crea una versión de prueba del framework Spring, pero MockitoExtention
le permite crear objetos falsos. Los objetos falsos son un tema muy interesante, definitivamente lo tocaremos, pero un poco más adelante.
4.4 @Tiempo de espera
Terminemos esta lección con una pequeña e interesante anotación @Timeout
. Le permite establecer el tiempo para ejecutar la prueba. Si la prueba tomó más tiempo del especificado en la anotación, entonces se considera fallida.
class TimeoutDemo {
@Test @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
Esto concluye nuestra conferencia.
GO TO FULL VERSION