1. ホーム
  2. java

[解決済み] モッキート メソッドをスパイしようとすると、元のメソッドが呼び出される

2022-03-24 19:57:31

質問

Mockito 1.9.0を使用しています。 JUnitテストでクラスの単一のメソッドの動作をモック化したいので、次のようにします。

final MyClass myClassSpy = Mockito.spy(myInstance);
Mockito.when(myClassSpy.method1()).thenReturn(myResults);

問題は、2行目にある myClassSpy.method1() が実際に呼び出され、例外が発生します。 モックを使っている唯一の理由は、後でいつでも myClassSpy.method1() が呼び出されると、本物のメソッドは呼び出されずに myResults オブジェクトが返されます。

MyClass はインターフェースであり myInstance はその実装です。

このスパイ行為を正すには、どうしたらいいのでしょうか?

解決方法は?

引用します 公式ドキュメント :

リアルオブジェクトをスパイする際の重要なゲッチュ

スタブスパイにwhen(Object)が使えないことがあります。例を挙げます。

List list = new LinkedList();
List spy = spy(list);

// Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty)
when(spy.get(0)).thenReturn("foo");

// You have to use doReturn() for stubbing
doReturn("foo").when(spy).get(0);

あなたの場合、次のような感じです。

doReturn(resultsIWant).when(myClassSpy).method1();