2012-09-26 1 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) 

이 때문에 반환 null가 :

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

이 수수께끼 같다 - 나는 기본을 (하나의 호출 만) 사용하는 경우가 여러 번 호출되는 있기 때문에 실패,하지만 난 그 복수를 말한다면 호출은 괜찮습니다. 아무런 호출도 찾을 수 없으므로 실패합니다!

아무도 도와 드릴 수 있습니까?

+3

특정 번호를 사용하려고 했습니까? 'verify (userService, times (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

관련 문제