5.1 सत्यापन () विधि
आभासी वस्तुओं को बनाने के अलावा, एक और दिलचस्प कार्य अक्सर उत्पन्न होता है - यह सुनिश्चित करने के लिए कि परीक्षण के तहत वर्ग सही वस्तुओं के सही तरीकों को बुलाता है। इसके अलावा, उन्होंने आवश्यक संख्या में, सही मापदंडों के साथ, और इस तरह कॉल किया।
इसके लिए, मॉकिटो के पास भी कुछ जादू है - विधियों का एक परिवार Mockito.verify(…)
। मेथड कॉल चेकिंग को निर्दिष्ट करने वाला सामान्य नियम है:
Mockito.verify(an object).method name(parameter);
उदाहरण:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//method call
String name = mockList.get(10);
// check if the method was called
Mockito.verify(mockList).get(10);
}
}
मेथड कॉल के दौरान, verify()
हम नियम सेट करते हैं कि mockitoList
पैरामीटर 10 वाली मेथड को ऑब्जेक्ट पर कॉल किया जाना चाहिए get()
।
5.2 कॉल की संख्या की जाँच के साथ सत्यापन () विधि
कभी-कभी अधिक जटिल सत्यापन परिदृश्य होते हैं। उदाहरण के लिए, आपको न केवल इस तथ्य की जांच करने की आवश्यकता है कि विधि को कॉल किया गया था, बल्कि, उदाहरण के लिए, कि इसे 3 बार कॉल किया गया था। या इसे आपसे एक चक्र में बुलाया गया था और इसलिए इसे एन बार कहा जाना चाहिए था।
हम यह नहीं पूछेंगे कि क्या यह किया जा सकता है, हम तुरंत पूछेंगे: इस तरह के नियम को कैसे लिखा जाए? और एक बार फिर, मॉकिटो ने हमें निराश नहीं किया। नियम को इस प्रकार निर्दिष्ट किया जा सकता है:
Mockito.verify(an object,quantity).method name(parameter);
महत्वपूर्ण! मात्रा एक प्रकार नहीं है int
, बल्कि एक विशेष वस्तु है जो विभिन्न पैटर्नों को परिभाषित कर सकती है। क्या आपको विधि के विभिन्न संस्करण याद हैं any()
? यहाँ भी ऐसा ही है - ऐसे विशेष तरीके हैं जिनसे आप विभिन्न परिदृश्य सेट कर सकते हैं:
तरीका | विवरण | |
---|---|---|
1 | कभी नहीँ() | विधि को कभी नहीं कहा जाना चाहिए |
2 | टाइम्स (एन) | एन बार |
3 | कम से कम (एन) | एन या अधिक बार |
4 | कम से कम एक बार() | 1 या अधिक बार |
5 | सबसे अधिक (एन) | एन या कम बार |
6 | केवल() | केवल एक कॉल और केवल इस विधि के लिए होना चाहिए |
उदाहरण:
String name1 = mockList.get(1); //method call
String name2 = mockList.get(2); //method call
String name3 = mockList.get(3); //method call
//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());
आपको यह भी आवश्यकता हो सकती है कि, निर्दिष्ट विधि आमंत्रणों के अलावा, वस्तु के लिए कोई अन्य संदर्भ नहीं बनाया जाए । इसके लिए एक नियम है:
Mockito.verifyNoMoreInteractions(an object);
5.3 विधि कॉल ऑर्डर
पिछले नियम किसी भी तरह से कॉलिंग विधियों के क्रम को विनियमित नहीं करते थे। नियम को बस पूरा करना है और बस इतना ही। लेकिन ऐसी स्थितियाँ होती हैं जब विधि कॉल का क्रम महत्वपूर्ण होता है, और मॉकिटो के पास इसके लिए भी एक समाधान है।
एक विशेष वस्तु का उपयोग करके विधि कॉल का एक सख्त क्रम निर्दिष्ट किया जा सकता है InOrder
। पहले आपको इसे बनाने की आवश्यकता है:
InOrder inOrder = Mockito.inOrder(an object);
और उसके बाद विधियों को कॉल करके नियम जोड़ें verify()
।
उदाहरण:
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 मॉकिटो में अपवादों की जाँच करना
तथ्य यह है कि अपवादों को फेंक दिया गया है, थोड़ा अलग तरीके से चेक किया गया है। ऐसा करने के लिए, विधि का उपयोग करें assertThrows()
। ऐसे चेक का सामान्य प्रारूप है:
Assertions.assertThrows(exception.class, () -> an object.methodname());
कुछ भी जटिल नहीं।
उदाहरण:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//set the behavior of the method (needed for demonstration purposes only)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//check if an IllegalStateException will be thrown when calling the size method
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}
GO TO FULL VERSION