122

エラーの詳細:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by updateItemAttributesByJuId()
updateItemAttributesByJuId() should return ResultRich
This exception might occur in wrongly written multi-threaded tests.
Please refer to Mockito FAQ on limitations of concurrency testing.

私のコード:

@InjectMocks
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl());
@Mock
protected JuItemWriteService juItemWriteService;

when(arrangeManagerSpy
    .updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId())))
    .thenReturn(false);

ご覧のとおり、私はではなく(を返します)を呼び出しwhenています。updateItemAttributesbooleanupdateItemAttributesByJuId

  1. Mockitoがbooleanからを返そうとしているのはなぜupdateItemAttributesByJuIdですか?
  2. これをどのように修正できますか?
4

20 に答える 20

252

https://groups.google.com/forum/?fromgroups#!topic/mockito/9WUvkhZUy90によると、言い換える必要があります

when(bar.getFoo()).thenReturn(fooBar)

doReturn(fooBar).when(bar).getFoo()
于 2012-07-17T09:55:22.520 に答える
43

同様のエラー メッセージが表示されるもう 1 つの理由は、finalメソッドをモックしようとすることです。final メソッドをモックしようとすべきではありません ( Final メソッドのモックを参照してください)。

マルチスレッドテストでもエラーに直面しました。その場合、gnaによる回答が機能しました。

于 2013-12-02T12:54:09.820 に答える
6

私は最近この問題を抱えていました。問題は、モックしようとしていたメソッドにアクセス修飾子がないことでした。public を追加すると問題が解決しました。

于 2014-09-18T19:29:48.083 に答える
3

私の場合、 と の両方を使用してい@RunWith(MockitoJUnitRunner.class)ましMockitoAnnotations.initMocks(this)た。削除MockitoAnnotations.initMocks(this)すると正常に動作しました。

于 2019-04-23T18:42:03.607 に答える
2

アノテーションを使用している場合は、@InjectMocks の代わりに @Mock を使用する必要があるかもしれません。@InjectMocks は @Spy と @Mock の両方として機能するためです。また、@Spy は最近実行されたメソッドを追跡するため、間違ったデータが返されたり、サブされたりするように感じるかもしれません。

于 2014-01-08T17:16:32.440 に答える