3.1 doReturn() पद्धत
आता जादू येते...
समजा तुम्ही एक बनावट मॉक ऑब्जेक्ट तयार केला आहे, परंतु तुम्हाला ते कसे तरी कार्य करण्यासाठी आवश्यक आहे. जेव्हा विशिष्ट पद्धती कॉल केल्या गेल्या तेव्हा काहीतरी महत्त्वाचे केले गेले किंवा पद्धतींनी विशिष्ट परिणाम दिला. काय करायचं?
Mockito लायब्ररी तुम्हाला मॉक ऑब्जेक्टमध्ये इच्छित वर्तन जोडण्याची परवानगी देते.
एखाद्या विशिष्ट पद्धतीला कॉल केल्यावर एखाद्या मॉक ऑब्जेक्टने ठराविक निकाल द्यायचा असल्यास, कोड वापरून हा “नियम” ऑब्जेक्टमध्ये जोडला जाऊ शकतो:
Mockito.doReturn(result).when(an object).method name();
तुम्ही पाहता, मेथड कॉलच्या शेवटी, method name?
येथे प्रत्यक्षात कोणताही कॉल चालू नाही. पद्धत doReturn()
एक विशेष प्रॉक्सी-ऑब्जेक्ट परत करते ज्याच्या मदतीने ती ऑब्जेक्टच्या पद्धतींच्या कॉलचे निरीक्षण करते आणि अशा प्रकारे, नियम लिहिला जातो.
पुन्हा. मॉक ऑब्जेक्टमध्ये जोडण्यासाठी नियम लिहिण्याचा हा एक हुशार मार्ग आहे . जेव्हा तुम्ही ते पाहता तेव्हा तुमच्या डोक्यात अशा कोडचा अचूक अर्थ लावण्यासाठी काही कौशल्य लागते. अनुभवाने येतो.
मला वाटते एक ठोस उदाहरण आवश्यक आहे. चला एक मॉक क्लास ऑब्जेक्ट बनवू ArrayList
आणि त्याची पद्धत size()
10 क्रमांक परत करण्यास सांगू. संपूर्ण कोड यासारखा दिसेल:
@ExtendWith(MockitoExtension.class)
class DoReturnTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation () {
//create a rule: return 10 when calling the size method
Mockito.doReturn(10).when(mockList).size();
//the method is called here and will return 10!!
assertEquals(10, mockList.size());
}
}
होय, हा कोड कार्य करेल, चाचणी अयशस्वी होणार नाही.
3.2 when() पद्धत
मॉक ऑब्जेक्टमध्ये वर्तन नियम जोडण्याचा आणखी एक मार्ग आहे - वर कॉल करून Mockito.when()
. हे असे दिसते:
Mockito.when(an object.method name()).thenReturn(result);
मागील प्रमाणेच मॉक ऑब्जेक्ट वर्तन नियम लिहिण्याची ही पद्धत आहे. तुलना करा:
Mockito.doReturn(result).when(an object).method name();
येथे अगदी तेच घडते - नवीन नियमाचे बांधकाम.
खरे आहे, पहिल्या उदाहरणात दोन वजा आहेत:
- कॉल खूप गोंधळात टाकणारा आहे.
an object.method name()
- पद्धत
methodname()
परत आल्यास कार्य करणार नाहीvoid
.
बरं, वापरून आमचे आवडते उदाहरण लिहूयाMockito.when()
@ExtendWith(MockitoExtension.class)
class WhenTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//create a rule: return 10 when calling the size method
Mockito.when(mockList.size() ).thenReturn(10);
//the method is called here and will return 10!!
assertEquals(10, mockList.size());
}
}
3.3 doThrow() पद्धत
आम्ही शोधून काढले की मॉक ऑब्जेक्ट मेथडने विशिष्ट परिणाम कसा मिळवावा. मी त्याला विशिष्ट अपवाद कसा बनवू शकतो? कडे पाठवू doReturn()
?
पद्धत परत येण्यापासून रोखण्यासाठी, म्हणजे अपवाद फेकणे, तुम्हाला वापरून नियम सेट करणे आवश्यक आहे doThrow()
.
Mockito.doThrow(exception.class).when(an object).method name();
आणि मग दुसरा पर्याय:
Mockito.when(an object.method name()).thenThrow(exception.class);
थोडी अपेक्षा आहे, बरोबर?
बरं, तुम्ही बघा, तुम्हाला आधीच समजायला लागलं आहे. चला एका उदाहरणासह त्याचे निराकरण करूया:
@ExtendWith(MockitoExtension.class)
class DoThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
Mockito.when(mockList.size() ).thenThrow(IllegalStateException.class);
mockList.size(); //an exception will be thrown here
}
}
आपल्याला विशिष्ट अपवाद ऑब्जेक्ट टाकण्याची आवश्यकता असल्यास, फॉर्मचे बांधकाम वापरा:
Mockito.doThrow(new Exception()).when(an object).method name();
फक्त doThrow()
पद्धतीला अपवाद ऑब्जेक्ट पास करा आणि ते पद्धत कॉल दरम्यान फेकले जाईल.