6.1 MockStatic() bilan statik metodlarni maklash
Yana bir muhim narsa – statik metodlarni maklash va tekshirish. "Nima muammo?", deb so'rashing mumkin. Ha, ular statik, lekin u ham metod-ku. Va bu yerda siz yanglishasiz.
Eslab qol, biz mock-obyektlarni o'rganishni nima bilan boshlagandik? Ular sun'iy ravishda DynamicProxy klass orqali yaratilgandi. Statik metodlar esa hech qanday obyektlarga bog'lanmagani uchun va DynamicProxy orqali ularni qo'lga olish imkoniyati yo'q. Hammasi shunday.
Lekin Mockito yaratish guruhi shunday ishni bajardiki, ular o'zlarining klass bootloaderlarini yozishdi va yordamida klasslarni dinamik tarzda almashtirishni uddalashdi. Katta va murakkab ish, lekin ular buni uddalashdi.
Qo'shimcha kutubxona qo'shishingiz kerak bo'ladi pom.xml:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Agar sizga statik metodni mak qilish kerak bo'lsa, quyidagi tarzda ishlashingiz kerak.
1 Maxsus mock-obyekt klassini yaratamiz:
MockedStatic<ClassName>controller = Mockito.mockStatic(ClassName.class);
2 Bu obyektda ishlash qoidalarini qo'shamiz:
Bu obyektga qoidalarni boshqa usullar bilan ulashingiz kerak bo'ladi.
controller.when(ClassName::methodName).thenReturn(result);
3 Ushbu obyektni ishlatishni try-with-resources ichiga joylashtirish muhim, shunda obyekt darhol o'chiriladi va Mockito unga bog'liq qoidalarni tozalashi mumkin.
Misol:
@Test
void givenStaticMethodWithNoArgs () {
try (MockedStatic< StaticUtils> utilities = Mockito.mockStatic( StaticUtils.class)) {
//qoida qo'shamiz
utilities.when(StaticUtils::name).thenReturn("Salom");
//qoidani ishlashini tekshiramiz
assertEquals("Salom", StaticUtils.name());
}
}
Annotatsiyalar @Mock va @Spy bilan qanchalik chiroyli emas, lekin juda amaliy. Oddiy statik metodni maklay olmaganimizda testlar yozish juda qiyin edi, ayniqsa, ular test qilinayotgan metodlarning ichida ishlatilganda.
GO TO FULL VERSION