2011-08-26 17 views
8

मैं EasyMock का उपयोग करके एक बहुत ही सरल उदाहरण की कोशिश कर रहा हूं, हालांकि मैं इसे आसानी से नहीं बना सकता। मैं निम्नलिखित परीक्षण का मामला है:EasyMock.expect() का उपयोग करते समय त्रुटि को संकलित करें बहुत सरल उदाहरण में?

@Test 
public void testSomething() 
{ 
    SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
    SomeBase expected = new DerivesFromSomeBase(); 

    EasyMock.expect(mock.send(expected)); 
} 

हालांकि मैं EasyMock.expect(... लाइन में निम्न त्रुटि:

The method expect(T) in the type EasyMock is not applicable for the arguments (void) 

किसी सही दिशा में मुझे बात कर सकते हैं? मैं पूरी तरह से खो गया हूँ।

उत्तर

10

यदि आप void विधियों का परीक्षण करना चाहते हैं, तो उस विधि को कॉल करें जिसे आप अपने नकली पर जांचना चाहते हैं। फिर expectLastCall() विधि पर कॉल करें।

@Test 
public void testSomething() 
{ 
    SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
    SomeBase expected = new DerivesFromSomeBase(); 

    mock.send(expected); 

    EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() { 
     public Object answer() { 
      // do additional assertions here 
      SomeBase arg1 = (SomeBase) EasyMock.getCurrentArguments()[0]; 

      // return null because of void 
      return null; 
     } 
    }); 
} 
+0

आपका उदाहरण संकलित नहीं करता है। 'IAnswer' एक सामान्य है और एक टेम्पलेट की जरूरत है। यदि मैं 'IAnswer 'का उपयोग करता हूं तो' answer() 'विधि के दायरे में उपलब्ध' getCurrentArguments()' विधि नहीं है। मैं क्या गलत कर रहा हूं? –

+0

@bjarkef आप सही हैं यह 'EasyMock.getCurrentArguments()' होना चाहिए। मेरे पास स्थिर आयात था इसलिए मैंने नहीं देखा कि यह गायब था। – Jasper

8

के बाद से अपने भेजने() विधि शून्य देता है, बस उम्मीद मूल्यों और पुनरावृत्ति के साथ नकली विधि कॉल:

SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
SomeBase expected = new DerivesFromSomeBase(); 
mock.send(expected); 
replay(mock); 
+0

'पुनरावृत्ति के बाद()' मैं तो कार्रवाई है कि वास्तव में 'mock.send का कारण होता है() प्रदर्शन की अपेक्षा कर रहा हूँ' होने की:

यहाँ एक उदाहरण है। और EasyMock जोर देगी कि एक ही पैरामीटर के साथ मुझे वही कॉल परीक्षण के तहत मेरी कक्षा से निष्पादित किया जाता है? –

+0

हां, यह सही @bjarkef है। –

0

आप एक इंटरफेस मजाक कर रहे हैं के बाद से, एक विधि मजाक में बनाने का एकमात्र उद्देश्य लौटने के लिए होगा उस विधि से परिणाम। इस मामले में, ऐसा लगता है कि आपकी 'प्रेषण' विधि का रिटर्न प्रकार शून्य है। 'EasyMock.expect' विधि सामान्य है और रिटर्न प्रकार की अपेक्षा करता है, जो संकलक को आपको यह बताने के लिए प्रेरित कर रहा है कि आप एक शून्य विधि का उपयोग नहीं कर सकते क्योंकि इसमें रिटर्न प्रकार नहीं है।

अधिक जानकारी के लिए, http://easymock.org/api/easymock/3.0/index.html पर EasyMock API दस्तावेज़ देखें।

0

आप इस तरह से शून्य वापसी के साथ स्क्रिप्ट विधियों को नहीं कर सकते हैं; अपने expected ऑब्जेक्ट पर अपने send विधि के व्यवहार को कैसे नकल कर सकते हैं, इस पर एक अच्छे उत्तर के लिए this question देखें।

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