1. ホーム
  2. java

[解決済み] Mockitoを使用する際のモッキングとスパイの違いは何ですか?

2022-04-25 15:31:54

質問

Mockitoのスパイを使用する場合、どのようなユースケースが考えられますか?

すべてのスパイユースケースは、callRealMethodを使用したモックで処理できるように思います。

1つの違いは、ほとんどのメソッドコールを本物にしたい場合、モックとスパイを使うことでコードの行数を減らせることです。それとも、私がより大きな絵を見逃しているのでしょうか?

解決方法は?

答えは ドキュメント :

リアルパーシャルモック (1.8.0以降)

社内での議論やメーリングリストでの議論を経て、ついにMockitoにパーシャルモックのサポートが追加されました。以前は、部分的なモックはコード・スモーフィングであると考えていました。しかし、私たちはパーシャルモックの正当な使用例を見つけました。

リリース1.8以前はspy()が本当の部分モックを生成せず、一部のユーザを困惑させていました。スパイについてもっと読む。 こちら または spy(Object) メソッドの javadoc を参照してください。

callRealMethod() の後に導入されました。 spy() しかし、後方互換性を確保するために、spy()はもちろん残されています。

そうでなければ、あなたの言うとおり、スパイのメソッドはスタブされていない限りすべて本物です。モックのメソッドは、以下の場合を除いてすべてスタブです。 callRealMethod() が呼び出されます。一般に、私は callRealMethod() を使うことを強制されないからです。 doXxx().when() イディオムではなく、従来の when().thenXxx()