56

Mockito と Spring Test フレームワークを使用する非常に単純なテスト ケースがあります。私がする時

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 を使用しています。共有して正しい方向に導いてください。

4

12 に答える 12

59

最初に pcUserService の MOCK を作成してから、そのモックを使用する必要があります。

PcUserService mock = org.mockito.Mockito.mock(PcUserService.class);
when(mock.read("1")).thenReturn(pcUser);
于 2012-02-08T06:37:52.797 に答える
1

基本的に、PowerMockito.mockStatic を使用して、クラスのすべての静的メソッドの静的モッキングを有効にする必要があります。これは、when-thenReturn 構文を使用してそれらをスタブできるようにすることを意味します。例: PowerMockito.mockStatic(TestClass.class); when(TestClass.getString()).thenReturn("HelloWorld!"); 注:@PrepareForTest({ TestClass.class })単体テスト クラスに追加する必要があります。

于 2020-04-17T18:40:24.270 に答える
1

MockedStaticまたはを使用しているときにこの例外が発生した場合Mockito.mockStaticは、静的メソッドの呼び出しでマッチャーとリテラルが混在していることも意味します。

YourClass.staticMethod(any(), "literal")好きなミックスを変更してみてくださいYourClass.staticMethod(any(), eq("literal"))

于 2021-11-22T17:18:37.250 に答える