2013-02-04 36 views
8

मैं एक FizzConfigurator वर्ग कि लगता है कि के लिए एक इकाई परीक्षण लिख रहा हूँ के साथ एक जासूस विधि मजाक वास्तव में डेटाबेस को आग लगाना और हिट नहीं करना), लेकिन यह मुझे सत्यापित करने की अनुमति देता है जो doBuzz(String) को doWidget निष्पादित करने के समाप्त होता है। मॉकिटो नौकरी के लिए सही उपकरण की तरह दिखता है।Mockito

public class FizzConfiguratorTest { 
    @Test 
    public void callingDoBuzzAlsoCallsDoWidget() { 
     FizzConfigurator fixture = Mockito.spy(new FizzConfigurator()); 
     Mockito.when(fixture.doWidget(Mockito.anyString(), Config.ALWAYS)). 
      thenThrow(new RuntimeException()); 

     try { 
      fixture.doBuzz("This should throw."); 

      // We should never get here. Calling doBuzz should invoke our 
      // stubbed doWidget, which throws an exception. 
      Assert.fail(); 
     } catch(RuntimeException rte) { 
      return; // Test passed. 
     } 
    } 
} 

यह (कम से कम मेरे लिए) एक अच्छा रणनीति की तरह लगता है। लेकिन जब मैं वास्तव में यह कोड अप करने के लिए जाओ, मैं परीक्षा पद्धति के अंदर 2 लाइन पर निम्नलिखित संकलक त्रुटि मिलती है (Mockito.when(...) लाइन:

विधि जब (टी) प्रकार Mockito में लिए लागू नहीं है । तर्कों (शून्य)

मुझे लगता है कि Mockito एक विधि है कि void रिटर्न नकली नहीं कर सकते हैं तो मैं आप से पूछना:

  1. मैं सही ढंग से इस परीक्षण सेटअप आ रहा हूँ या वहाँ एक बेहतर, Mockito- है? अनुशंसित,परीक्षण का तरीका हुड के तहत 210 कॉल doWidget? और
  2. doWidget मॉकिंग/स्टबिंग के बारे में मैं क्या कर सकता हूं क्योंकि यह मेरी संपूर्ण FizzConfigurator कक्षा का सबसे महत्वपूर्ण तरीका है?

उत्तर

19

मैं परीक्षण करने के लिए अपवादों का उपयोग नहीं करता, लेकिन सत्यापन। और एक और समस्या यह है कि आप when() का उपयोग शून्य विधियों के साथ नहीं कर सकते हैं।

यहाँ कैसे मैं यह कर देगा:

FizzConfigurator fixture = Mockito.spy(new FizzConfigurator()); 
doNothing().when(fixture).doWidget(Mockito.anyString(), Mockito.<Config>any())); 
fixture.doBuzz("some string"); 
Mockito.verify(fixture).doWidget("some string", Config.SOMETIMES); 
+3

एक और समस्या यह है कि 'कब() 'जासूसों पर उपयोग नहीं किया जा सकता है - जासूसों के दस्तावेज [जासूसों का उपयोग करके] पर एक नज़र डालें (http://docs.mockito.googlecode.com/hg/latest/org /mockito/Mockito.html#13) (गॉचा नोट करें) और [डू * विधियों] (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#12)। – dj18

+0

और जांचें कि क्या कॉल ['' Mockito.reset''] है (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#17) आपके कोड में घुस गया है - नकली बातचीत और stubbing भूल जाता है। – phineas

0

यह एक स्पष्ट संकेत है कि doWidget विधि अन्य वर्ग जो FizzConfigurator पर निर्भर करेगा से संबंधित होना चाहिए है।

आपके परीक्षण में, यह नई निर्भरता एक नकली होगी, और आप आसानी से सत्यापित कर सकते हैं कि इसकी विधि verify के साथ कहलाती है या नहीं।