2012-10-31 16 views
11

में एक शून्य विधि के अंदर कई शून्य विधि कॉलों को अनदेखा कैसे करें मैं कक्षा में कई अन्य शून्य विधियों को कॉल करने के लिए एक शून्य विधि का परीक्षण कर रहा हूं (ये सभी विधियां एक ही कक्षा में हैं)। विधि इन पंक्तियों के साथ कुछ है ...मॉकिटो

public void methodToTest() { 
    methodA(); 
    methodB(); 
} 

void methodA() { 
    methodA1(); 
    methodA2(); 
    methodA3(); 
} 

मुझे क्या करना चाहते हैं इसके बाद के संस्करण methodA() कारण कुछ भी नहीं करना है। यही है, मैं methodA() मूल रूप से इस तरह रहना चाहता हूँ:

void methodA() { } 

मैं कोई लाभ नहीं हुआ methodA() पर दोनों doThrow() और doAnswer() कोशिश की है। ऐसा लगता है कि उन दोनों को पूरी तरह अनदेखा किया जा रहा है।

मैं क्या कोशिश की है का एक उदाहरण ...

doThrow(new RuntimeException()).when(mockedClass).methodA(); 

वहाँ यह करने के लिए एक तरह से सिर्फ Mockito का उपयोग कर है? मैं उस वर्ग को बदलने की स्वतंत्रता नहीं हूं जिसे संशोधित किया जा रहा है।

+1

यह काम करना चाहिए, क्या आप सुनिश्चित हैं कि 'methodA'' अंतिम 'नहीं है? – Brice

+0

'methodA'' अंतिम ' –

+1

नहीं है, जो आपके स्निपेट पर वापस देख रहा है जैसे आप आंशिक नकली करना चाहते हैं, शायद आप' methodA' निष्पादित कर रहे हैं, जबकि आप 'methodA' निष्पादित कर रहे हैं।' आप निश्चित रूप से 'मॉक (YourObject.class)' का उपयोग कर रहे हैं, तो निश्चित रूप से एक नकली कुछ भी नहीं करता है, और निश्चित रूप से कभी भी वास्तविक कोड निष्पादित नहीं करेगा। आप जो भी 'जासूस (YourObject.class) चाहते हैं उसे प्राप्त कर सकते हैं, यह डिफ़ॉल्ट रूप से वास्तविक कोड निष्पादित करेगा। हालांकि आंशिक मोक्स परीक्षण गंध के रूप में पहचाने जाते हैं, यदि डिज़ाइन गंध नहीं है, तो आपको 'विधि ए' के ​​व्यवहार को निर्भरता के रूप में पेश करने के अवसरों की तलाश करनी चाहिए, उदाहरण के लिए आप अपने एपीआई में 'एएसट्रेटी' के रूप में उजागर कर सकते हैं। – Brice

उत्तर

18

यदि आप methodB को अभी भी निष्पादित करना चाहते हैं, जबकि methodA कुछ भी नहीं करता है। यह ऐसा करेगा:

TestClass spy = spy(new TestClass()); 
doNothing().when(spy).methodA(); 
spy.methodToTest(); 
+0

मैंने इसका उल्लेख नहीं किया है, लेकिन मैं वास्तव में आपके उदाहरण में सूचीबद्ध एक जासूस का उपयोग कर रहा हूं। मैंने अपनी कक्षा में इस सटीक कोड का प्रयास किया है और methodA के आंतरिक() को अभी भी निष्पादित किया जा रहा है, जिसे मैं टालने की कोशिश कर रहा हूं ... –

+1

क्या आप 'doNothing() के उलटा नोटेशन का उपयोग कर रहे हैं। जब() ' ऊपर की तरह, या आप 'कब()। फिर वापसी() 'नोटेशन का उपयोग कर रहे हैं? उत्तरार्द्ध रूप वास्तव में एक जासूस पर वास्तविक विधि का आह्वान करता है जब कोड की 'कब' लाइन लागू की जा रही है (यानी, जब आंशिक नकली के वैकल्पिक व्यवहार को बदला जा रहा है), और इससे समस्याएं पैदा हो सकती हैं। इसलिए उस समस्या से बचने के लिए जासूसों पर पूर्व 'कुछ भी नहीं' नोटेशन का उपयोग करने की आवश्यकता –

+0

@ केविनवेल्कर - मैं 'doNothing() का उपयोग कर रहा हूं। जब() ' –

संबंधित मुद्दे