2012-01-24 22 views
7

में कहा जाता है नहीं कर रहे हैं निम्नलिखित उदाहरण में:सुनिश्चित गैर मज़ाक उड़ाया तरीकों mockito

Execution execution = mock(Execution.class); 
    when(execution.getLastQty()).thenReturn(1000.0); 
    when(execution.getLastPrice()).thenReturn(75.0); 

    order.onFillReceived(execution); 

    assertEquals(0, order.getLeavesQty(), 0); 

निष्पादन कई अन्य तरीकों कि कहा जाता है नहीं किया जाना चाहिए है। मॉक किए गए दो तरीकों का उपयोग इस परीक्षण के भीतर किया जाना चाहिए और उन्हें बुलाया जाना चाहिए। यदि किसी अन्य विधि को बुलाया जाता है, तो परीक्षण विफल होना चाहिए।

यदि मैकिटो को किसी भी अन्य तरीके से बुलाया जाता है तो मैं असफल कैसे कहूं?

+1

आप क्यों चाहेंगे? यदि 'ऑर्डर' कक्षा 'निष्पादन' वर्ग के अन्य तरीकों को कॉल करने के लिए होती है, और यह आपके द्वारा परीक्षण किए जा रहे व्यवहार के नतीजे को प्रभावित नहीं करती है, तो आप परीक्षण क्यों विफल करना चाहते हैं? –

+0

इस विशेष मामले में ... आइए ऑर्डर करें। ऑर्डर करें। ऑर्डर देने के लिए हवाएं ऑर्डर करें .getLeavesQty execution.getWrongQty() से विधि के आधार पर। चूंकि GetWrongQty उस विधि (0) के लिए डिफ़ॉल्ट मान वापस कर देगा, लेकिन दावा अभी भी काम करेगा भले ही getLeavesQty सही मान से सेट नहीं किया जा रहा है। यह केवल इसलिए है क्योंकि गलत मानों के लिए डिफ़ॉल्ट वही मान है जो परीक्षण में लगाया जा रहा है। – user465342

+0

मैं इसका पालन नहीं करता हूं। लेकिन क्या परीक्षण के लिए मूल्य चुनने के लिए क्लीनर नहीं होगा जो दुर्घटना से आसानी से नहीं हो सकता है? ताकि यदि परीक्षा उत्तीर्ण हो, तो आप जानते हैं कि गणना सही ढंग से हुई है। यदि परीक्षण यह प्रदर्शित नहीं करता है कि सही मूल्य की गणना की गई थी (दुर्घटना से होने के बजाए), तो मैं परीक्षण के मूल्य पर सवाल उठाऊंगा। –

उत्तर

8

documentation इसे स्पष्ट रूप से शामिल करता है। तुम्हें पता है, verifyNoMoreInteractions कॉल करने के लिए या तो (के रूप में किए गए दस्तावेज़ों के अनुसार) या

verify(execution).getLastQty(); 
verify(execution).getLastPrice(); 
verifyNoMoreInteractions(execution); 

verify बुला या ignoreStubs उपयोग करने के बाद चाहते हैं:

verifyNoMoreInteractions(ignoreStubs(execution)); 
+0

इसे जोड़ना परीक्षण में विफल रहता है कि ... कोई इंटरैक्शन यहां नहीं चाहता था। – user465342

+0

फ्लिप पक्ष पर ... अगर ignoreStubs का उपयोग किया जाता है (1.9 में उपलब्ध), उपर्युक्त सही ढंग से काम करता है। वास्तविक कोड सत्यापित है NoMoreInteractions (ignoreStubs (निष्पादन)); – user465342

+0

@ उपयोगकर्ता 465342: ठीक है कि आप जो करने की कोशिश कर रहे थे उस पर निर्भर करता है। आपने यह नहीं दिखाया है कि 'ऑनफिल रिसीव' क्या करता है - मुझे संदेह है कि अगर यह केवल 'getLastQty() 'और' getLastPrice() 'को प्रत्येक बार कॉल करता है, तो उपर्युक्त ठीक होगा, मुझे विश्वास है। लेकिन हाँ, अगर आप उनको स्टब विधियों के रूप में देखना चाहते हैं तो 'ignoreStubs' जाने का सही तरीका दिखता है। –

0

तुम कभी विधि की कोशिश कर सकते हैं कि अगर उपयोग के मामले फिट बैठता है:

यानी

verify(execution, never()).someOtherMethod(); 
संबंधित मुद्दे