4.1 विधि पैरामीटर
मॉक ऑब्जेक्ट में जोड़े गए पिछले नियम बिना मापदंडों के तरीकों से निपटते हैं। और पैरामीटर वाले तरीकों के लिए नियम कैसे बनाएं? इसके अलावा, मैं नियम बनाना चाहता हूं ताकि कुछ पैरामीटर मानों के लिए एक परिणाम हो, और अन्य के लिए - दूसरा।
ऐसे आप भी कर सकते हैं। यदि आप एक निश्चित पैरामीटर के साथ कुछ विशिष्ट वापस करने की विधि चाहते हैं, तो नियम इस तरह लिखा जा सकता है:
Mockito.doReturn(result).when(an object).method name(parameter);
आइए बेहतर समझने के लिए एक उदाहरण देखें। हमारी सूची 10वें तत्व का अनुरोध करते समय इवान नाम और 500वें तत्व का अनुरोध करते समय मरिया नाम लौटा दें। आपने कहा हमने किया।
@ExtendWith(MockitoExtension.class)
class ParamsTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//adding the first rule
Mockito.doReturn("Ivan").when(mockList).get(10);
//adding a second rule
Mockito.doReturn("Maria").when(mockList).get(500);
assertEquals("Ivan", mockList.get(10));
assertEquals("Maria", mockList.get(500));
}
}
4.2 पैरामीटर टेम्पलेट्स
और तुरंत चालाक सहयोगी मुझसे सवाल पूछेंगे: "क्या होगा यदि विधि को तर्कों की आवश्यकता है, लेकिन किसी भी मूल्य के लिए इसे उसी परिणाम को वापस करना होगा?"। चलो मत लिखो:
Mockito.doReturn("Ivan").when(mockList).get(1);
Mockito.doReturn("Ivan").when(mockList).get(2);
Mockito.doReturn("Ivan").when(mockList).get(99);
नहीं, कोई आपको ऐसा लिखने के लिए मजबूर नहीं कर रहा है। यदि आप एक मॉक ऑब्जेक्ट में एक नियम जोड़ना चाहते हैं जो किसी तर्क के साथ किसी विधि के लिए काम करता है, तो इसके लिए एक विशेष वस्तु है:
Mockito.any()
इसके साथ हमारा उदाहरण इस प्रकार लिखा जाएगा:
Mockito.doReturn("Ivan").when(mockList).get(any(int.class));
यहाँ कुछ बारीकियाँ हैं। ऑब्जेक्ट Mockito.any()
का प्रकार है Object
, इसलिए विभिन्न प्रकार के पैरामीटर के अनुरूप हैं:
तरीका | पैरामीटर प्रकार | |
---|---|---|
1 | कोई भी() | अशक्त सहित वस्तु |
2 | कोई भी (कक्षा का नाम। वर्ग) | कक्षा का नाम |
3 | कोई भी () | int यहाँ |
4 | कोई भी बूलियन () | बूलियन |
5 | कोई भी डबल () | दोहरा |
6 | कोई सूची () | सूची |
अधिक सही ढंग से, हमारा उदाहरण इस तरह दिखेगा:
Mockito.doReturn("Ivan").when(mockList).get(anyInt());
4.3 डू आंसर () विधि
हम आभासी तरीकों के जटिल व्यवहार के बारे में जानते हैं। जल्दी या बाद में एक स्थिति होगी जब आप चाहते हैं कि यह आभासी विधि जटिल व्यवहार करे। उदाहरण के लिए, इसे मापदंडों के आधार पर मान वापस करना चाहिए, स्ट्रिंग को अपरकेस में बदलना चाहिए।
इसके लिए एक विशेष विधि है - doAnswer()
, जो एक ऐसा कार्य करती है जो आपको चाहिए:
Mockito.doAnswer(function).when(an object).method name(parameter);
चलिए get()
क्लास मेथड List
को पास किए गए तर्क का वर्ग वापस करते हैं। और निम्न प्रोग्राम लिखें:
@ExtendWith(MockitoExtension.class)
class DoAnswerTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
Mockito.doAnswer(invocation -> {
int parameter = invocation.getArgument(0);
return parameter * parameter;
}).when(mockList).get(anyInt());
assertEquals(100, mockList.get(10));
assertEquals(25, mockList.get(5));
}
}
हमने उत्तर वर्ग के ऑब्जेक्ट का उपयोग करके फ़ंक्शन को परिभाषित किया।