2011-06-17 10 views
17

में मुझे एक समस्या आई और मुझे एक सुरुचिपूर्ण समाधान नहीं मिला।शून्य को वापस करने के लिए नकली/परीक्षण विधि कैसे करें, संभवतः मॉकिटो

तो समस्या सेलेनियम वेब ड्राइवर के एक नकली के साथ है, और मुझे नहीं पता कि मुझे शून्य तरीकों का परीक्षण/नकल कैसे करना चाहिए।

public void clickAndWait(String locator) { 
    if(isElementPresent(locator) == false) throw some exception; 
    selenium.clickAndWait(); //a problematic delegating call to selenium 
} 

तो क्या मैं कर रहा है, कैसे ठीक ऐसी पद्धति का परीक्षण करने के पूछ रहा हूँ, एक परीक्षण फेंके, लेकिन कैसे ठीक है कि शून्य विधि मैं प्रतिनिधि की कसौटी पर बनाने के अपवाद के लिए हो सकता है?

+5

जिज्ञासा से बाहर, आप एकीकरण परीक्षण के लिए यूनिट परीक्षण क्यों लिखते हैं? –

+0

संभावित डुप्लिकेट [मैकिटो के साथ शून्य विधियों के लिए नकली कैसे करें] (https: // stackoverflow।कॉम/प्रश्न/2276271/कैसे-टू-मेक-टू-शून्य-विधियों-साथ-मॉकिटो) – centic

उत्तर

31

इस Mockito documentation से निम्नलिखित कोड नमूना दिखाता है एक शून्य विधि उपहास करने के लिए कैसे:

doThrow(new RuntimeException()).when(mockedList).clear(); 

// following throws RuntimeException: 
mockedList.clear(); 
+0

मॉकिटो दस्तावेज़ीकरण लिंक अब उपलब्ध नहीं है :( – DeepInJava

+0

@ दीपइन जावा - इसे इंगित करने के लिए धन्यवाद! लिंक अपडेट किया गया ... – hoipolloi

21
doAnswer(new Answer<Void>() { 
     @Override 
     public Void answer(InvocationOnMock invocation) throws Throwable { 

      return null; 
     } 
    }).when(mock).method((SomeClass) anyObject()); 
+1

+1 उपयोगी उत्तर दिखाता है कि विधि को पैरामीटर लेते समय doThrow/doAnswer/etc का उपयोग कैसे करें यानी 'anyObject() ' –

+0

हाय मार्सीन के साथ कास्टिंग, मैंने इसे देने और http://stackoverflow.com/ में उल्लिखित त्रुटि प्राप्त करने का प्रयास किया प्रश्न/27142314/पावरमॉक-मॉकिंग-शून्य-विधि-फेंकता-त्रुटि क्या आप कृपया उस पर एक नज़र डालें? – sriram

1

तुम भी उपयोग कर सकते हैं:

  • विधि Mockito.verify (नकली/जासूस) यह जांचने के लिए कि विधि कितनी बार बुलाया गया है।
  • या शून्य विधि को पारित कुछ पैरामीटर देखने/जांचने के लिए argument captor का उपयोग करें।
0

आप अपने विधि कॉल पर एक अपवाद trow कर सकते हैं, यहाँ एक छोटा सा उदाहरण है कि यह कैसे करना है:

doThrow(new RuntimeException()).when(mockedList).clear(); 

तो आप फोन mockedList.clear(); मज़ाक उड़ाया विधि एक अपवाद फेंक देते हैं।

या आप भरोसा कर सकते हैं कि कितनी बार अपने विधि बुलाया गया था, यहाँ एक छोटा सा उदाहरण है कि कैसे यह करने के लिए: हर पर

verify(mockedList, times(1)).clear(); 
10

पिछले जवाब कुछ कर रही पर जोर दिया है (संभवतः एक अपवाद फेंक) कहते हैं। जैसे

doThrow(new RuntimeException()).when(mockedList).clear(); 

और फिर टोंटदार सेवा (या तर्क) कहते हैं: इस तरह से जब आप की तरह कुछ करना

mockedList.clear(); 

यह एक अपवाद उत्पन्न होगा। क्या होगा यदि आप विधि के उचित कामकाज के लिए परीक्षण करना चाहते हैं तो शायद सकारात्मक परीक्षण केस लिखना। इस तरह के मामले के लिए विधि लौटने एक शून्य मजाक के द्वारा किया जा सकता है:

doNothing().when(mockedList).clear(); 

जिसका मतलब है कि आप mockedList नकली के लिए clear() विधि टोंटदार के बाद से, आप यह सुनिश्चित करें कि इस विधि इकाई के तर्क को प्रभावित करने नहीं जा रहा है हो सकता है कि और फिर भी आप अपवाद उत्पन्न किए बिना शेष प्रवाह की जांच कर सकते हैं।

+0

हाय सौरभ, मैंने एक ही समाधान की कोशिश की और http://stackoverflow.com/questions/ में उल्लिखित अपवाद प्राप्त किया 27142314/पावरमॉक-मॉकिंग-शून्य-विधि-फेंकता-त्रुटि क्या आप कृपया उस पर एक नज़र डालें? – sriram

0

जावा 8 में यह एक छोटे से क्लीनर

doAnswer((i) -> { 
    // Do stuff with i.getArguments() here 
    return null; 
}).when(*mock*).*method*(*methodArguments*); 

return null; महत्वपूर्ण है और इसके बिना संकलन काफी कुछ अस्पष्ट त्रुटियों के साथ असफल हो जायेगी रूप में यह के लिए एक उपयुक्त ओवरराइड को खोजने के लिए सक्षम नहीं होगा बनाया जा सकता है doAnswer

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