2012-09-26 24 views
11

"çok fazla fiili çağırmaları" ile başarısız kadar) (doğrulamak aşağıdadır:mockito) (doğrulamak ben eklemek çalışıyorum oldukça dahil deneme sürecindeyiz

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

Bu, bu hata ile başarısız:

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: 
Yani bu şekilde değiştirdim:

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

Ve şimdi başarısız:

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

bu çünkü dönüyor boş:

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

Bu şaşırtıcı görünüyor - Ben varsayılan (tek çağırma only) kullanırsanız, birden çok kez çağrılan ediliyor çünkü başarısız, ama o birden bunu söylesem Çağırmalar iyi, çünkü herhangi bir çağrı bulamadığı için başarısız oluyor!

Bu konuda yardımcı olabilecek herhangi biri var mı?

+3

Belirli bir numarayı kullanarak denediniz mi? '(userService, times (4)) ...' –

cevap

11

Her ikisi de, userService.getUserById() çağrıldığında ne olduğu ile uğraşmak istediğiniz gibi görünüyor ve ayrıca döndürülen nesneye setPasswordChangeRequired(true) çağrıldığını doğrulayın.

Sen gibi bir şey ile gerçekleştirebilirsiniz:

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

Teşekkürler! Alaycı şeyler benim için biraz yeni ama çok yardımcı oldun. Ve hızlı yanıt için teşekkürler! – user1071914