JavaRush /Kurslar /All lectures for UZ purposes /Obyektlarning muayyan xatti-harakatlarini aniqlash

Obyektlarning muayyan xatti-harakatlarini aniqlash

All lectures for UZ purposes
Daraja, Dars
Mavjud

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());  
    }
}
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION