2012-09-26 5 views
11

ich einen ziemlich beteiligten Testfall habe ich das hinzufügen versuchen folgende verify() zu:Mockito verify() schlägt mit „zu vielen tatsächlichen Anrufungen“

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

Dies schlägt mit diesem Fehler:

So
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: 

ich änderte es dazu:

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

Und jetzt schlägt es mit:

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

weil dies Rückkehr null:

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

Dies scheint rätselhaft - Wenn ich die Standard (ein Aufruf nur) verwenden, schlägt fehl, weil es mehrmals aufgerufen wird ist, aber wenn ich es, dass mehrere sagen Aufrufe sind OK, es schlägt fehl, weil es keine Aufrufe finden kann!

Kann mir jemand dabei helfen?

+3

Haben Sie versucht, eine bestimmte Nummer verwenden? 'verify (userService, mal (4)) ...' –

Antwort

11

Es sieht so aus, als ob Sie beide nachspotten möchten, was passiert, wenn userService.getUserById() aufgerufen wird, und überprüfen Sie auch, ob setPasswordChangeRequired(true) für das zurückgegebene Objekt aufgerufen wird.

Sie können dies wie mit etwas erreichen:

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

Danke! Das spöttische Zeug ist ein wenig neu für mich, aber du hast viel geholfen. Und danke für die schnelle Antwort! – user1071914

Verwandte Themen