CodeGym/Java Course/मॉड्यूल 3/मापदंडों के साथ नकली तरीकों को कॉल करना

मापदंडों के साथ नकली तरीकों को कॉल करना

उपलब्ध

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));
    }
}

हमने उत्तर वर्ग के ऑब्जेक्ट का उपयोग करके फ़ंक्शन को परिभाषित किया।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं