2012-09-26 9 views
11

मैं एक काफी शामिल परीक्षण का मामला मैं जोड़ने के लिए कोशिश कर रहा हूँ के साथ विफल रहता है निम्नलिखित करने के लिए सत्यापित करें():Mockito को सत्यापित() "भी कई वास्तविक आमंत्रण"

verify(userService).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE)); 

यह इस त्रुटि के साथ विफल:

org.mockito.exceptions.verification.TooManyActualInvocations: 
userService.getUserById(<any>); 
Wanted 1 time: 
-> at  test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404) 
But was 4 times. Undesired invocation: 

तो मैं इसे इस के लिए बदल दिया:

verify(userService, atLeastOnce()).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE)); 

और अब इसके साथ विफल रहता है:

java.lang.NullPointerException 
    at test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404) 

इस वजह लौटने बातिल:

verify(userService, atLeastOnce()).getUserById(anyLong()) 

इस पेचीदा लगता है - अगर मैं डिफ़ॉल्ट (केवल एक मंगलाचरण) का उपयोग करें, यह विफल रहता है, क्योंकि यह कई बार अनुरोध किया जा रहा है, लेकिन अगर मैं यह कहता हूँ कि कई invocations ठीक है, यह विफल रहता है क्योंकि यह किसी भी आमंत्रण नहीं मिल सकता है!

क्या कोई इससे मदद कर सकता है?

+3

आप एक विशिष्ट संख्या का उपयोग कर की कोशिश की? 'सत्यापित करें (उपयोगकर्ता सेवा, समय (4)) ...' –

उत्तर

11

ऐसा लगता है कि आप दोनों क्या करना चाहते हैं जब userService.getUserById() कहा जाता है, और यह भी सत्यापित किया जाता है कि setPasswordChangeRequired(true) उस लौटे ऑब्जेक्ट पर कॉल किया जाता है।

आप की तरह कुछ के साथ ऐसा कर सकते हैं:

UserService userService = mock(UserService.class); 
User user = mock(User.class); 
when(userService.getUserById(anyLong())).thenReturn(user); 

... 

// invoke the method being tested 

... 

verify(user).setPasswordChangeRequired(true); 
+0

धन्यवाद! मजाकिया सामान मेरे लिए थोड़ा नया है लेकिन आपने बहुत मदद की। और त्वरित प्रतिक्रिया के लिए धन्यवाद! – user1071914