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
, म्हणून विविध प्रकारच्या पॅरामीटर्ससाठी अॅनालॉग आहेत:
पद्धत | पॅरामीटर प्रकार | |
---|---|---|
१ | कोणताही() | शून्यासह ऑब्जेक्ट |
2 | any(ClassName.class) | वर्गाचे नाव |
3 | anyInt() | int |
4 | anyBoolan() | बुलियन |
५ | anyDouble() | दुप्पट |
6 | कोणतीही यादी() | यादी |
अधिक योग्यरित्या, आमचे उदाहरण असे दिसेल:
Mockito.doReturn("Ivan").when(mockList).get(anyInt());
4.3 doAnswer() पद्धत
आम्ही आभासी पद्धतींच्या गुंतागुंतीच्या वर्तनाकडे आलो. लवकरच किंवा नंतर अशी परिस्थिती येईल जेव्हा तुम्हाला या आभासी पद्धतीमध्ये जटिल वर्तन हवे असेल. उदाहरणार्थ, त्याने पॅरामीटर्सवर अवलंबून मूल्ये परत केली पाहिजे, स्ट्रिंगला अप्पर केसमध्ये रूपांतरित केले पाहिजे.
यासाठी एक विशेष पद्धत आहे - 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));
}
}
आम्ही उत्तर वर्गाच्या ऑब्जेक्टचा वापर करून फंक्शन परिभाषित केले.