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 @Disabledse 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 WebServerExtensionpasa al método de prueba llamado URLpara 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
    }
}

SpringExtensioncrea una versión de prueba del framework Spring, pero MockitoExtentionle 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.