JavaRush /Kurslar /All lectures for UZ purposes /Mockito yordamida rivojlangan test qilish

Mockito yordamida rivojlangan test qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

1.1 Mockito kutubxonasi

Bugun biz rivojlangan test qilishni o'rganamiz. Aniqrog'i, Mockito kutubxonasi bilan tanishamiz. Buni o'rganmasdan qochib ketmang.

Birinchidan, bu kutubxona Spring test qilishda standart hisoblanadi. Bu hozirgi kunda Java-backend ishlab chiqishda juda muhim.

Ikkinchidan, Spring kodlaringiz uchun testlar yozishingiz kerak bo'ladi. Yozganingiz backend keraklicha ishlayotganiga ishonch hosil qilishning yagona usuli uning API metodlarini chaqirishdir. Va testlar yordamida buni qilish testlarsiz qilishdan 10 marta osonroq. Bunga o'zingiz ishonch hosil qilasiz.

pom.xml faylingizga Mockito kutubxonasini qo'shish uchun quyidagi kodni ishlating:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Mockito loyihasining barcha manba kodini GitHub da topishingiz mumkin.

1.2 Mock-ob'ektlar

Xo'sh, bu Mockito nima va u nimaga shu qadar yaxshi?

Test qilish jarayonida rivojlanish va shakllanishida, haqiqiy ob'ekt o'rniga kiritishning ehtiyoji ko'pincha yuzaga keladi.

Masalan, ma'lumotlar bazasi bilan ishlaydigan va uni o'zgartiradigan kodni test qilish kerak. Har bir testdan oldin ma'lumotlar bazasining holati bir xil bo'lishini ta'minlash yaxshi bo'lardi (aks holda, testlar turli xil bo'ladi). Va ma'lumotlar bazasini oddiyroq qilishni xohlaysiz, shunda bu holatlarni tezda qaytarib olish mumkin.

Yoki, masalan, foydali SMS jo'natish bilan shug'ullanadigan kodni test qilasiz. Va ushbu jo'natishlar uchun qandaydir pullik SMS Gatewaydan foydalaniladi. Kodni test qilish uchun qandaydir virtual Gatewayni kiritish yaxshi bo'lardi, shuning uchun yuzlab SMSni notanishlarga jo'natish kerak emas.

Yoki kodi test serverida mavjud bo'lmagan boshqa veb-serverlardan ma'lumot so'raydi. Yoki internet to'lovlari uchun 50 marta test qilish kerak va faqat shundan so'ng haqiqiy moliyaviy kanallarga ruxsat berish kerak.

O'ylaymanki, tushundingiz... Virtual ob'ektlar yoki "zaglushki" deb ataladigan ob'ektlar juda foydali narsa.

Bu erda murakkablik paydo bo'ladi - Java'da statik tur tipizatsiyasi bor. Demak, RealDatabase tipidagi ob'ekt o'rniga VirtualDatabase ob'ektiga havola qaбul qilish uchun, VirtualDatabase klassini RealDatabase dan meros olish kerak.

Keyin esa RealDatabase klassining bir qator xususiy metodlari va boshqa real ob'ektlarga havolalarni saqlaydigan o'zgaruvchilari borligi aniqlanadi va bu tarzda yaxshi bir zaglushka yozishning imkoni yo'q. Nazariyada yaxshi, amaliyotda esa qiyinroq.

Bu yerda DynamicProxy yordamga keladi (ko'proq ma'lumotni o'qishingiz mumkin), bu Java 5da chiqqan. Bu compile jarayoni davrida e'tirozsiz qilib virtual ob'ektlar yaratishga imkon beradi.

Bunday virtual ob'ektlar mock’lar (mock - maket) deb ataladi. Mockito kutubxonasi bu mock’lar bilan ishlashni o'ziga hos darajaga olib chiqdi. Shu sababli kutubxona nomi shunday.

1.3 @ExtendWith annotatsiyasi

Mockito kutubxonasi JUnit bilan juda yaxshi ishlaydi, uni hatto JUnitni kengaytirish deb hisoblash mumkin.

Unit-testlaringizda Mockito kutubxonasini faollashtirishning ikki usuli mavjud. Birinchi usuli - maxsus annotatsiyani qo'shish:


@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

Ikkinchi usuli - uning ishlashini openMocks() metodini chaqirish orqali yoqish:


public class MockitoAnnotationTest {
 @BeforeEach
    public void init() {
 MockitoAnnotations.openMocks(this);
   }
}

Odatda birinchi variantni ko'proq ko'rasiz, lekin ba'zida ikkinchisini bilish foydali.

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