2012-02-08 2 views
21

Mockito 및 Spring Test 프레임 워크를 사용하는 매우 간단한 테스트 케이스가 있습니다. 내가 할 때Mockito Exception -()에 모의 메소드 호출이되어야하는 인수가 필요한 경우

when(pcUserService.read("1")).thenReturn(pcUser); 

이 예외가 발생합니다.

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'. 
For example: 
    when(mock.getArticles()).thenReturn(articles); 

Also, this error might show up because: 
1. you stub either of: final/private/equals()/hashCode() methods. 
    Those methods *cannot* be stubbed/verified. 
2. inside when() you don't call method on mock but on some other object. 

    at com.project.cleaner.controller.test.PcUserControllerTest.shouldGetPcUser(PcUserControllerTest.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 

다른 방법으로 시도했지만이 오류 메시지가 계속 표시됩니다. Mockito와 Spring 3.1.0.RELEASE를 사용하고 있습니다. 나와 공유하고 올바른 방향으로 인도하십시오.

+0

저도 같은 문제를했습니다,하지만 난 사용하고 있습니다 @Autowired @ReplaceWithMock (beanName에 = "logDao") 개인 LogDao logDaoMock을; –

답변

20

먼저 pcUserService의 MOCK을 생성 한 다음 해당 모의기를 사용해야합니다. 경우 다른 사람에

PcUserService mock = org.mockito.Mockito.mock(PcUserService.class); 
when(mock.read("1")).thenReturn(pcUser); 
+0

네, 효과가있었습니다. 감사합니다 :) – jsf

+0

하지만 그 경우에는 디버깅 할 수 없습니다. 실제로 그 메소드를 호출합니까? – eatSleepCode

+0

@eatSleepCode :이 예제에서는 'PcUserService.read' 메서드가 호출되지 않습니다. 대신 Mockito Mock이 호출되고,이 모의 객체는'pcUser'를 반환합니다 – Ralph

9

이 문제 ....

그것은 또한 방법은 당신이 pcUserService.read을 조롱하려고하는 경우가 될 수를 명중하는 final 방법으로 선언됩니다. 내가 알기 론 Mockito에 문제가 생기는 것 같습니다.

0

이 문제에 대한 또 다른 해결책은 PowerMockRunner을 사용하는 테스트 클래스의 경우 사용자가 목록에 조롱하는 클래스를 @PrepareForTest 주석에 추가해야 할 수 있습니다.

@PrepareForTest({ PcUserService.class })

0

같은 오류에 대한 또 다른 가능한 이유가있다 - - 예를 들어

때로는 IDE가 선호 정적으로 다른 패키지에서 Mockito.when()를 가져올 수 :

import static io.codearte.catchexception.shade.mockito.Mockito.when; 

import static org.mockito.Mockito.when; //should normally use this one 

내가 '언제'일까요? o.codearte 패키지는 컴파일 레벨에서 org.mockito.Mockito.any()와 호환되지만 런타임과 정확히 동일한 오류 메시지로 실패합니다.

관련 문제