गैर-नकली वस्तु की विधि को कैसे सत्यापित किया जाए?


103

ऐसा लगता है कि मॉकिटो केवल यह सत्यापित करता है कि मॉक ऑब्जेक्ट की विधि को कहा जाता है या मॉक ऑब्जेक्ट में हमेशा कुछ ऐसा होता है doReturn().when(mock object)

लेकिन क्या मैं एक मॉक ऑब्जेक्ट बना सकता हूं और परिभाषित कर सकता हूं doReturn().when(mock object) और फिर किसी अन्य ऑब्जेक्ट की विधि को सत्यापित कर सकता हूं ?

यहाँ मैं क्या करना चाहता हूँ: मैं एक mockEnvironment को परिभाषित करता हूं और जो कुछ भी होता है, उसकी प्रतिक्रिया वापस करता है। लेकिन फिर मैं दूसरे तरीकों के विभिन्न तरीकों को सत्यापित करना चाहता हूं अलग-अलग मामलों में कहा जाता है।

उसको कैसे करे?

public class BaseClass {
    private Environment mockEnvironment;
    @Test
    public void testcase () {
     setMockitoEnvironment(); 
     response = foo(mockEnvironment, argument1);
     verify(anotherObj).codePath1(...);
     response = foo(mockEnvironment, argument2);
     verify(anotherObj).codePath2(...);
   }
}

//this method successfully return a response with any input 
//because I do not care how response is eventually generated, 
//I only care whether code path reaches createResponse() via 
//code path 1 or code path 2.
private void setMockitoEnvironment() {
    mockEnvironment = mock(Environment.class);
    doReturn (response).when(mockEnvironment).createResponse(for any input);
}
private Response foo(...) {
    ... 
    return createResponse(...);
}

जवाबों:


121

इसके लिए आप मॉकिटो स्पाई का इस्तेमाल कर सकते हैं । यदि आप anotherObjएक जासूस के रूप में सेटअप करते हैं तो आप उस वस्तु पर विधि कॉल को सत्यापित कर सकते हैं। आपके उदाहरण में आपको यह सुनिश्चित करने की आवश्यकता है कि कॉल fooसामान्य कार्यान्वयन के बजाय जासूस का उपयोग करने के लिए है anotherObj। जासूस कुछ इस तरह से है:

AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff -- e.g. anotherObjSpy.foo(...);
verify(anotherObjSpy).codePath1(...);

इसका मतलब है कि अगर मुझे कई चीजों को सत्यापित करना है तो मुझे कई नकली वस्तुओं को बनाना और इंजेक्ट करना पड़ सकता है? यह सुविधाजनक नहीं है।
user389955

@ user389955 हां, आपको प्रत्येक वस्तु को जासूसी के रूप में जांचना होगा। जहां तक ​​मुझे पता है कि उसके आसपास कोई रास्ता नहीं है। मॉकिटो को ऑब्जेक्ट्स के लिए एक प्रॉक्सी जोड़ने की आवश्यकता है और किसी को मॉकिटो को बताना होगा कि कौन सी वस्तुओं को प्रॉक्सी करना है।
के एरलैंडसन

10
"// do stuff" कहने के बजाय यह जोड़ने के लिए मददगार हो सकता है कि यह "एक अन्य" है जो कि परीक्षण किए जा रहे तरीके को कॉल करे।
jwehrle

धन्यवाद @jwehrle, आपको कॉल में एक औरObjSpy का उपयोग करने की आवश्यकता है, अन्यथा परीक्षण काम नहीं करेंगे।
argoth

2

@Spyएनोटेशन के साथ नॉन-मॉक ऑब्जेक्ट को एनोटेट करें और फिर चेक करें verify()। इसकी जाँच करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.