5.1 verify() metodi
Virtual obyektlar yaratishdan tashqari, tez-tez sinovdan o'tkazilayotgan klass kerakli obyektlarning kerakli metodlarini chaqirganligiga ishonch hosil qilish kerak bo'ladi. Bundan tashqari, kerakli miqdorda, to'g'ri parametrlar bilan va hokazo.
Buning uchun Mockito-da ham ozgina sehr bor – Mockito.verify(…) metodlar oilasi. Metod chaqiruvini tekshirish uchun umumiy qoidasi, quyidagicha ko'rinishga ega:
Mockito.verify(obyekt).metodNomi(parametr);
Misol:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//metodni chaqirish
String name = mockList.get(10);
//metod chaqirilganligini tekshirish
Mockito.verify(mockList).get(10);
}
}
verify() metodini chaqirayotganda, biz mockitoList obyektida get() metodi 10 parametri bilan chaqirilishi kerakligini aytdik.
5.2 verify() metodi chaqiruvlar sonini tekshirish bilan
Ba'zan murakkabroq tekshiruv ssenariylari mavjud bo'ladi. Masalan, sen faqat metod chaqirilganligini emas, balki u 3 marta chaqirilganligini tekshirmoqchi bo'lasan. Yoki metod tsiklda chaqirilgan va demak N marta chaqirilgan bo'lishi kerak.
Bu mumkinligini so'ramaymiz, darhol so'raymiz: qanday qoidani yozish kerak? Va yana Mockito bizni qiyinchilikda qoldirmaydi. Qoidani quyidagi ko'rinishda belgilash mumkin:
Mockito.verify(obyekt,miqdor).metodNomi(parametr);
Muqim! Miqdor bu int turdagi emas, balki turli shablonlarni belgilay oladigan maxsus obyekt. any() metodining turli xil variantlarini eslaysanmi? Bu yerda ham shunaqasi – turli ssenariylarni belgilash uchun maxsus metodlar mavjud:
| Metod | Ta'rifi | |
|---|---|---|
| 1 | never() | Metod hech qachon chaqirilmasligi kerak |
| 2 | times(n) | n marta |
| 3 | atLeast(n) | n yoki undan ko'p marta |
| 4 | atLeastOnce() | 1 yoki undan ko'p marta |
| 5 | atMost(n) | n yoki undan kam marta |
| 6 | only() | Faqat bitta chaqiriq bo'lishi kerak va faqat shu metoda |
Misol:
String name1 = mockList.get(1); //metodni chaqirish
String name2 = mockList.get(2); //metodni chaqirish
String name3 = mockList.get(3); //metodni chaqirish
//get() metodi 3 marta chaqirilganligini tekshirish
Mockito.verify(mockList, times(3)).get(anyInt());
Sen, shuningdek, metod chaqiruvlaridan tashqari hech qanday boshqa murojaat bo'lmaganligini talab qilishing mumkin. Buning uchun quyidagi qoida mavjud:
Mockito.verifyNoMoreInteractions(obyekt);
5.3 Metodlar chaqirilish tartibi
Oldingi qoidalar metodlar chaqirilish tartibini belgilamagan. Qoidani shunchaki bajarish kifoya edi. Ammo ba'zi vaziyatlarda metodlar chaqirilish tartibi muhim va buning uchun Mockito-da ham yechim mavjud.
Metodlar chaqirilishining qat'iy tartibini maxsus InOrder obyekti yordamida belgilash mumkin. Avval uni yaratishingiz kerak:
InOrder inOrder = Mockito.inOrder(obyekt);
Va keyin unga verify() metodlarini chaqirish orqali qoidalarni qo'shish mumkin.
Misol:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();
5.4 Mockito-da istisnolarni tekshirish
Istisnolar yuzaga kelganligini tekshirish biroz boshqacha amalga oshiriladi. Buning uchun assertThrows() metodidan foydalanish kerak. Tekshirishning umumiy formati quyidagicha:
Assertions.assertThrows(istisno.class, () -> obyekt.metodNomi());
Hech qanday qiyinchilik yo'q.
Misol:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//Metodning xatti-harakatini belgilash (faqat namoyish uchun kerak)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//size metodi chaqirilganda IllegalStateException chiqarilishini tekshirish
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}
GO TO FULL VERSION