4.1 @Dezactivat

Acum să ne uităm la câteva adnotări foarte utile și populare ale cadrului JUnit. Prima adnotare vă permite să dezactivați un anumit test, astfel încât JUnit să nu îl apeleze. Este necesar în cazurile în care observi că testul nu funcționează corect sau schimbi codul și testul se întrerupe accidental.

După cum am scris mai devreme, 99% dintre teste nu sunt acceptate de nimeni, așa că toate se dovedesc a fi dezactivate mai devreme sau mai târziu. Prin urmare, această adnotare este prima din lista celor utile.

Luați în considerare exemplul ei:

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

În exemplul de mai sus, metoda testOnDev()nu va fi apelată. Apropo, adnotarea @Disabledpoate fi scrisă imediat înainte de declarația clasei, apoi toate metodele acesteia vor fi ignorate.

@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 @Cuibărit

JUnit vă permite să apelați metode de testare pe clase imbricate. Mă refer la clase de test imbricate. Nu este un fapt că le vei întâlni des, dar există o astfel de posibilitate, așa că trebuie să înțelegi ce este.

Pentru a apela metodele unei clase imbricate înainte de declararea acesteia, trebuie să scrieți o adnotare @Nested. Exemplu:

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

Mai multe detalii găsiți în documentația oficială .

4.3 @ExtendWith

O altă adnotare utilă este @ExtendWith. Cel mai probabil te vei întâlni cu ea foarte des, așa că haideți să o privim mai detaliat.

JUnit este un cadru puternic care vă permite să scrieți diverse plugin-uri (extensii) pentru personalizarea flexibilă a muncii dvs. Unele extensii pot colecta statistici despre teste, altele pot emula un sistem de fișiere în memorie, altele pot emula lucrul în interiorul unui server web și așa mai departe.

Dacă codul tău rulează într-un cadru (de exemplu, Spring), atunci aproape întotdeauna acest cadru gestionează crearea și configurarea obiectelor din codul tău . Prin urmare, un plugin de testare special este indispensabil. Exemple:

Exemplul 1. Extensia WebServerExtensiontrece la metoda de testare numită URLpentru a funcționa corect.

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

Acesta este modul în care testele încep de obicei să testeze codul care funcționează cu cadrul Spring:

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

    @MockBean
    TestService service;

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

SpringExtensioncreează o versiune de testare a cadrului Spring, dar MockitoExtentionvă permite să creați obiecte false. Obiectele false este un subiect foarte interesant, cu siguranță îl vom atinge, dar puțin mai târziu.

4.4 @Timeout

Să încheiem această prelegere cu o mică și interesantă adnotare @Timeout. Vă permite să setați timpul pentru a rula testul. Dacă testul a durat mai mult decât este specificat în adnotare, atunci este considerat eșuat.

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

Aceasta se încheie prelegerea noastră.