1. ホーム

[解決済み】Mockitoは引数に関係なくメソッドをスタブできますか?

2022-04-16 21:04:29

質問

Mockitoを使用して、レガシーコードをテストしようとしています。

をスタブ化したい。 FooDao を、次のように本番で使用します。

foo = fooDao.getBar(new Bazoo());

書けるようになった。

when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);

しかし、明らかな問題点は getBar() が呼び出されることはなく、同じ Bazoo オブジェクトのためにメソッドをスタブ化しました。(その new 演算子を使用します!)

を返すような形でメソッドをスタブできればいいのですが。 myFoo 論にかかわらず それができなければ、他の回避策の提案にも耳を傾けますが、妥当なテストカバレッジが得られるまでは、プロダクションコードを変更しないようにしたいと思います。

どのように解決するのですか?

when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);

または null s):

when(
  fooDao.getBar(
    (Bazoo)notNull()
  )
).thenReturn(myFoo);

マッチャーのインポートもお忘れなく(他にも多数あります)。

Mockito 2.1.0以降に対応。

import static org.mockito.ArgumentMatchers.*;

旧バージョンの場合。

import static org.mockito.Matchers.*;