JavaRush /Kurslar /All lectures for UZ purposes /JUnit da foydali annotation lar

JUnit da foydali annotation lar

All lectures for UZ purposes
Daraja, Dars
Mavjud

4.1 @Disabled

Endi biz JUnit framework ning juda foydali va mashhur annotation larini ko'rib chiqamiz. Birinchi annotation ma'lum bir testni o'chirib qo'yish imkonini beradi ki, JUnit uni chaqirmasligi uchun. Bu agar test noto'g'ri ishlayotgani sezilgan bo'lsa yoki kodni o'zgartirsak va test tasodifan buzilsa kerak bo'ladi.

Oldin yozganimdek, 99% testlarga hech kim e'tibor bermaydi, shuning uchun ular oxir-oqibat o'chiriladi. Shuning uchun bu annotation foydali ro'yxatda birinchi.

Misolini ko'rib chiqamiz:


public class AppTest {
 
    @Disabled("Test vaqtinchalik o'chirilgan. Rost, rost") @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")));
    }
}

Yuqoridagi misolda testOnDev() metodi chaqirilmaydi. Aytgancha, @Disabled annotatsiyasini darhol klass e'lon qilishidan oldin yozib qo'yish mumkin, unda uning barcha metodlari inkor qilinadi.


@Disabled("Vaqtinchalik o'chirdik testi, 2001 yil may oyiga qadar tuzatamiz")
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 ichki klasslar test metodlarini chaqirishga imkon beradi. Bu degani, ichki test klasslarini chaqirish mumkin. Ehtimol, bu bilan tez-tez to'qnash kelmaysan, lekin bunday ehtimol mavjud, shuning uchun nima ekanligini tushunish kerak.

Ichki klass metodlarini chaqirish uchun, uning e'lon qilishidan oldin @Nested annotation sini yozish kerak. Misol:


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

Batafsil ma'lumotni rasmiy dokumentatsiyada o'qish mumkin.

4.3 @ExtendWith

Boshqa bir foydali annotation — @ExtendWith. Ehtimol, uni juda tez-tez uchratib turasan, shuning uchun uni batafsil ko'rib chiqamiz.

JUnit — bu kuchli framework bo'lib, turli xil plaginni (kengaytmalarni) yozishga imkon beradi va bu o'z ishini moslashuvchan sozlash imkonini beradi. Ba'zi kengaytmalar testlar haqida statistikani to'plash mumkin, boshqalar xotirada fayl tizimini emulyatsiya qilishadi, uchinchilar esa web-server ichida ishlashni emulyatsiya qilishadi va hokazo.

Agar sening koding qanaqadir framework ichida ishlayotgan bo'lsa (masalan, Spring), deyarli har doim bu framework sening kodining ob'ektlarini yaratishi va sozlashini boshqaradi. Shuning uchun maxsus test pluginisiz o'tib bo'lmaydi. Misollar:

Misol 1. WebServerExtension kengaytmasi chorlangan test metodiga URL ni uzatadi to'g'ri ishlash uchun.


@Test @ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
    WebClient webClient = new WebClient();
    // WebClient ni ishlatib, web serverga serverUrl ni ishlatib ulanish va javob tekshiriladi
    assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}

Shunday qilib odatda Spring framework bilan ishlovchi kodni test qilish boshlanadi:


@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
 
    @MockBean
    TestService service;
 
    @Test
    void test() {
        assertNotNull(service); // Test muvaffaqiyatli
    }
}

SpringExtension Spring framework ning test varianti yaratadi, MockitoExtention esa soxta ob'ektlarni yaratishga imkon beradi. Soxta ob'ektlar juda qiziqarli mavzu, albatta u bilan tanishamiz, lekin biroz keyinroq.

4.4 @Timeout

Bu lektsiyani kichik va qiziqarli @Timeout annotation bilan yakunlaymiz. Bu testni bajarish vaqtini belgilash imkonini beradi. Agar test belgilangan vaqtdan ko'proq bajarilsa, u muvaffaqiyatsiz deb hisoblanadi.


class TimeoutDemo {
    @Test @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    void failsIfExecutionTimeExceeds100Milliseconds() {
        // test 100 millisekunddan ko'proq vaqt olib turib qolsa muvaffaqiyatsiz bo'ladi
    }
}

Shunday qilib, bizning lektsiyamizni yakunlaymiz.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION