2012-02-08 8 views
21

上のメソッド呼び出しでなければならない引数を必要とします。私が行うときMockito例外 - (は)私はMockitoとSpringテストフレームワークを使用して非常に簡単なテストケースを有するモック

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:REALメソッドの 'PcUserService.read'は、この例では決して呼び出されません。代わりにMockitoモックが呼び出され、このモックが 'pcUser'を返す – Ralph

9

また、この方法は、あなたがモックしようとしていること場合、pcUserService.read可能性があり

....この問題を打つ、final方法として宣言されています。私が気づいたことから、これはMockitoに問題を引き起こすように見えます。

0

この問題のもう1つの解決策は、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()に準拠していますが、実行時にはまったく同じエラーメッセージで失敗します。

関連する問題