2012-02-08 7 views
21

पर एक विधि कॉल होना आवश्यक है, मेरे पास एक बहुत ही सरल परीक्षण केस है जो मॉकिटो और स्प्रिंग टेस्ट फ्रेमवर्क का उपयोग कर रहा है। जब मैंमॉकिटो अपवाद - जब() को एक तर्क की आवश्यकता होती है जिसे नकली

when(pcUserService.read("1")).thenReturn(pcUser); 

मुझे यह अपवाद मिलता है।

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'. 
For example: 
    when(mock.getArticles()).thenReturn(articles); 

Also, this error might show up because: 
1. you stub either of: final/private/equals()/hashCode() methods. 
    Those methods *cannot* be stubbed/verified. 
2. inside when() you don't call method on mock but on some other object. 

    at com.project.cleaner.controller.test.PcUserControllerTest.shouldGetPcUser(PcUserControllerTest.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 

मैंने विभिन्न तरीकों से प्रयास किया है लेकिन यह त्रुटि संदेश प्राप्त करना जारी रखें। मैं मॉकिटो के साथ वसंत 3.1.0.RELEASE का उपयोग कर रहा हूँ। कृपया मुझे सही दिशा में साझा करें और मार्गदर्शन करें।

+0

मैं एक ही समस्या है, लेकिन मैं उपयोग कर रहा हूँ: @Autowired @ReplaceWithMock (beanName = "logDao") निजी LogDao logDaoMock; –

उत्तर

20

आपको पहले पीसीयूसर सेवा का एमओसीके बनाना होगा, और फिर उस नकली का उपयोग करें।

PcUserService mock = org.mockito.Mockito.mock(PcUserService.class); 
when(mock.read("1")).thenReturn(pcUser); 
+0

हाँ, यह काम किया। धन्यवाद :) – jsf

+0

लेकिन मैं उस मामले में डीबग नहीं कर सकता। क्या यह वास्तव में उस विधि को बुलाता है? – eatSleepCode

+0

@eatSleepCode: वास्तविक विधि 'PcUserService.read' इस उदाहरण में कभी भी नहीं आती है। इसके बजाय एक मॉकिटो मॉक का आह्वान किया जाता है, और यह नकली वापस 'पीसीयूसर' – Ralph

9

मामले दूसरों में इस मुद्दे ....

यह भी मामला है कि विधि तुम बाहर, pcUserService.read उपहास करने के लिए कोशिश कर रहे हैं हो सकता है मारा, एक final पद्धति के रूप में घोषित किया जाता है। मैंने जो देखा है उससे मॉकिटो के साथ समस्याएं उत्पन्न होती हैं।

0

इस समस्या का एक और समाधान यह हो सकता है कि PowerMockRunner का उपयोग कर रहे टेस्ट क्लास के मामले में, आपको उस श्रेणी को जोड़ना पड़ सकता है जिसे आप सूची में मजाक कर रहे हैं, @PrepareForTest एनोटेशन में।

उदाहरण के लिए -

@PrepareForTest({ PcUserService.class })

0

ऐसी त्रुटि के लिए एक और संभावित कारण नहीं है - कभी कभी आईडीई पसंद स्थिर एक और पैकेज से Mockito.when() आयात करने के लिए:

import static io.codearte.catchexception.shade.mockito.Mockito.when; 

बनाम

import static org.mockito.Mockito.when; //should normally use this one 

यह बात 'कब' से है o.codearte पैकेज संकलन स्तर पर org.mockito.Mockito.any() के साथ अनुपालन करता है, लेकिन उस सटीक त्रुटि संदेश के साथ रनटाइम के दौरान विफल रहता है।

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