2016-04-14 11 views
40

मैं सेवा के बाद सेवा परीक्षण के लिए Mockito का उपयोग कर रहा हूँ। doAnswer बनाम thenReturn का उपयोग करने के लिए मैं उलझन में हूं।मॉकिटो: doAnswer बनाम फिर से

क्या कोई मुझे विस्तार से मदद कर सकता है? अब तक, मैंने thenReturn के साथ इसे आजमाया है।

उत्तर

62

आपको thenReturn या doReturn का उपयोग करना चाहिए जब आप एक विधि कॉल के दौरान वापसी मूल्य को जानते हैं। जब आप मॉक किए गए विधि का आह्वान करते हैं तो यह परिभाषित मान वापस कर दिया जाता है।

thenReturn(T value) विधि कहने पर लौटने के लिए वापसी मूल्य सेट करता है।

@Test 
public void test_return() throws Exception { 
    Dummy dummy = mock(Dummy.class); 
    int returnValue = 5; 

    // choose your preferred way 
    when(dummy.stringLength("dummy")).thenReturn(returnValue); 
    doReturn(returnValue).when(dummy).stringLength("dummy"); 
} 

Answer प्रयोग किया जाता है जब आप अतिरिक्त कार्यों क्या करने की जरूरत है जब एक मज़ाक उड़ाया विधि शुरू हो जाती है, उदाहरण के लिए जब आपको इस विधि कॉल के पैरामीटर के आधार पर वापसी मूल्य की गणना करने की आवश्यकता होती है।

doAnswer() का उपयोग करें जब आप सामान्य Answer के साथ एक शून्य विधि को स्टब करना चाहते हैं।

उत्तर निष्पादित एक क्रिया निर्दिष्ट करता है और जब आप नकली के साथ बातचीत करते हैं तो लौटाया जाता है।

@Test 
public void test_answer() throws Exception { 
    Dummy dummy = mock(Dummy.class); 
    Answer<Integer> answer = new Answer<Integer>() { 
     public Integer answer(InvocationOnMock invocation) throws Throwable { 
      String string = invocation.getArgumentAt(0, String.class); 
      return string.length() * 2; 
     } 
    }; 

    // choose your preferred way 
    when(dummy.stringLength("dummy")).thenAnswer(answer); 
    doAnswer(answer).when(dummy).stringLength("dummy"); 
} 
+0

धन्यवाद @schlauergerd। अब मैं समझ गया। –

+0

हाय @ रोलैंड Weisleder लेकिन कभी-कभी आपको कुछ मूल्य उत्पन्न आंतरिक कोड वापस करना चाहिए और तर्कों के साथ कुछ भी नहीं करना चाहिए, उदा। 'कोड = UUID.randomUUID()', मुझे 'mockito' के साथ इसे कार्यान्वित करना असंभव लगता है। – zhuguowei

+0

जब आपके नकली को प्रत्येक आमंत्रण के लिए एक नया यूयूआईडी वापस करनी चाहिए तो आप 'वापसी' को केवल 'वापसी UUID.randomUUID(); 'के साथ लागू करेंगे। –