3.1 doReturn () विधि
अब जादू आता है ...
मान लीजिए कि आपने नकली नकली वस्तु बनाई है, लेकिन आपको इसे किसी भी तरह काम करने की ज़रूरत है। जब कुछ विधियों को बुलाया गया था, कुछ महत्वपूर्ण किया गया था, या विधियों ने एक निश्चित परिणाम दिया था। क्या करें?
मॉकिटो लाइब्रेरी आपको नकली वस्तु में वांछित व्यवहार जोड़ने की अनुमति देती है।
यदि आप चाहते हैं कि एक निश्चित विधि कहे जाने पर एक नकली वस्तु एक निश्चित परिणाम लौटाए, तो यह "नियम" कोड का उपयोग करके वस्तु में जोड़ा जा सकता है:
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 कब () विधि
मॉक ऑब्जेक्ट में व्यवहार नियम जोड़ने का एक और तरीका है - कॉल करके 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 डूथ्रो () विधि
हमने यह पता लगाया है कि मॉक ऑब्जेक्ट मेथड को एक विशिष्ट परिणाम कैसे दिया जाता है। मैं इसे एक विशिष्ट अपवाद कैसे बना सकता हूं? इसे भेजें 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()
विधि के लिए बस एक अपवाद वस्तु पास करें और इसे विधि कॉल के दौरान फेंक दिया जाएगा।