4.1 @Deaktiveret

Lad os nu se på nogle meget nyttige og populære annotationer af JUnit-rammen. Den første annotation giver dig mulighed for at slå en specifik test fra, så JUnit ikke kalder den. Det er nødvendigt i tilfælde, hvor du bemærker, at testen ikke fungerer korrekt, eller du ændrer koden, og testen går i stykker ved et uheld.

Som jeg skrev tidligere, er 99% af testene ikke understøttet af nogen, så de viser sig alle at være deaktiveret før eller siden. Derfor er denne annotation den første på listen over nyttige.

Overvej hendes eksempel:

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

I eksemplet ovenfor vil metoden testOnDev()ikke blive kaldt. Forresten @Disabledkan annoteringen skrives umiddelbart før klasseerklæringen, så vil alle dens metoder blive ignoreret.

@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 @Nested

JUnit giver dig mulighed for at kalde testmetoder på indlejrede klasser. Jeg mener indlejrede testklasser. Det er ikke et faktum, at du ofte vil støde på dem, men der er sådan en mulighed, så du skal forstå, hvad det er.

For at kalde metoderne for en indlejret klasse før dens erklæring, skal du skrive en annotation @Nested. Eksempel:

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

Flere detaljer kan findes i den officielle dokumentation .

4.3 @ExtendWith

En anden nyttig anmærkning er @ExtendWith. Mest sandsynligt vil du møde hende meget ofte, så lad os se nærmere på hende.

JUnit er en kraftfuld ramme, der giver dig mulighed for at skrive forskellige plugins (udvidelser) til fleksibel tilpasning af dit arbejde. Nogle udvidelser kan indsamle statistik om tests, andre kan efterligne et filsystem i hukommelsen, andre kan efterligne arbejde inde i en webserver og så videre.

Hvis din kode kører inde i en ramme (for eksempel Spring), så styrer denne ramme næsten altid oprettelsen og konfigurationen af ​​objekter i din kode . Derfor er et særligt test-plugin uundværligt. Eksempler:

Eksempel 1. Udvidelsen WebServerExtensiongår over til den kaldte testmetode URLfor at fungere korrekt.

@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());
}

Sådan begynder tests normalt at teste kode, der fungerer med Spring frameworket:

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {

    @MockBean
    TestService service;

    @Test
    void test() {
        assertNotNull(service); // Test succeeds
    }
}

SpringExtensionopretter en testversion af Spring frameworket, men MockitoExtentiongiver dig mulighed for at oprette falske objekter. Falske genstande er et meget interessant emne, vi vil helt sikkert røre ved det, men lidt senere.

4.4 @Timeout

Lad os afslutte dette foredrag med en lille og interessant kommentar @Timeout. Det giver dig mulighed for at indstille tidspunktet for at køre testen. Hvis testen tog længere tid end angivet i annotationen, betragtes den som mislykket.

class TimeoutDemo {
    @Test
    @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    void failsIfExecutionTimeExceeds100Milliseconds() {
        // test will fail if it takes more than 100 milliseconds
    }
}

Dette afslutter vores foredrag.