2012-09-26 2 views
11

ho un banco di prova abbastanza coinvolto Sto cercando di aggiungere la seguente verifica() a:Mockito verificare() non riesce con "troppe invocazioni reali"

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

Questo viene a mancare con questo errore:

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: 

quindi l'ho cambiato a questo:

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

E ora viene a mancare con:

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

perché questo sta tornando:

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

Questo sembra sconcertante - Se uso il predefinito (una sola invocazione), non riesce perché è invocata più volte, ma se lo dico che multipla le invocazioni sono OK, fallisce perché non riesce a trovare alcuna invocazione!

Qualcuno può aiutare con questo?

+3

Hai provato utilizzando un numero specifico? 'verifica (userService, times (4)) ...' –

risposta

11

Sembra che entrambi vogliate prendere in giro ciò che accade quando viene chiamato userService.getUserById() e verificare che setPasswordChangeRequired(true) sia richiamato su quell'oggetto restituito.

È possibile raggiungere questo obiettivo con qualcosa di simile:

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

Grazie! Le cose derisorie sono un po 'nuove per me, ma mi hai aiutato molto. E grazie per la rapida risposta! – user1071914