4.1 @Disabled

Ngayon tingnan natin ang ilang napaka-kapaki-pakinabang at tanyag na anotasyon ng balangkas ng JUnit. Binibigyang-daan ka ng unang anotasyon na i-off ang isang partikular na pagsubok upang hindi ito matawagan ng JUnit. Kailangan ito sa mga kaso kung saan napansin mong hindi gumagana nang tama ang pagsubok, o binago mo ang code at aksidenteng nasira ang pagsubok.

Tulad ng isinulat ko kanina, 99% ng mga pagsubok ay hindi sinusuportahan ng sinuman, kaya lahat sila ay hindi pinagana maaga o huli. Samakatuwid, ang anotasyong ito ang una sa listahan ng mga kapaki-pakinabang.

Isaalang-alang ang kanyang halimbawa:

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

Sa halimbawa sa itaas, ang pamamaraan testOnDev()ay hindi tatawagin. Sa pamamagitan ng paraan, ang anotasyon @Disableday maaaring isulat kaagad bago ang deklarasyon ng klase, pagkatapos ay ang lahat ng mga pamamaraan nito ay hindi papansinin.

@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

Binibigyang-daan ka ng JUnit na tumawag sa mga pamamaraan ng pagsubok sa mga nested na klase. I mean nested test classes. Ito ay hindi isang katotohanan na madalas mong makatagpo ang mga ito, ngunit may ganoong posibilidad, kaya kailangan mong maunawaan kung ano ito.

Upang tawagan ang mga pamamaraan ng isang nested class bago ang deklarasyon nito, kailangan mong magsulat ng annotation @Nested. Halimbawa:

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

Higit pang mga detalye ay matatagpuan sa opisyal na dokumentasyon .

4.3 @ExtendWith

Ang isa pang kapaki-pakinabang na anotasyon ay @ExtendWith. Malamang na madalas mo siyang makilala, kaya tingnan natin siya nang mas detalyado.

Ang JUnit ay isang malakas na balangkas na nagbibigay-daan sa iyong magsulat ng iba't ibang mga plugin (mga extension) para sa nababaluktot na pag-customize ng iyong trabaho. Ang ilang mga extension ay maaaring mangolekta ng mga istatistika tungkol sa mga pagsubok, ang iba ay maaaring tularan ang isang in-memory na file system, ang iba ay maaaring tularan ang pagtatrabaho sa loob ng isang web server, at iba pa.

Kung tumatakbo ang iyong code sa loob ng isang framework (halimbawa, Spring), halos palaging pinapamahalaan ng framework na ito ang paggawa at pagsasaayos ng mga bagay sa iyong code . Samakatuwid, ang isang espesyal na plugin ng pagsubok ay kailangang-kailangan. Mga halimbawa:

Halimbawa 1. Ang extension WebServerExtensionay pumasa sa tinatawag na paraan ng pagsubok URLupang gumana nang tama.

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

Ito ay kung paano karaniwang nagsisimula ang mga pagsubok sa pagsubok ng code na gumagana sa Spring framework:

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

    @MockBean
    TestService service;

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

SpringExtensionlumilikha ng isang pagsubok na bersyon ng Spring framework, ngunit MockitoExtentionnagbibigay-daan sa iyong lumikha ng mga pekeng bagay. Ang mga pekeng bagay ay isang napaka-kagiliw-giliw na paksa, tiyak na hahawakan namin ito, ngunit sa ibang pagkakataon.

4.4 @Timeout

Tapusin natin ang lecture na ito na may maliit at kawili-wiling anotasyon @Timeout. Pinapayagan ka nitong itakda ang oras upang patakbuhin ang pagsubok. Kung ang pagsubok ay tumagal ng mas maraming oras kaysa sa tinukoy sa anotasyon, ituturing itong nabigo.

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

Dito na nagtatapos ang aming panayam.