Mockito: メソッドをスパイしようとすると、元のメソッドが呼び出されます 質問する

Mockito: メソッドをスパイしようとすると、元のメソッドが呼び出されます 質問する

私は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それが重要であるならば、その実装です。

このスパイ行為を修正するには何をする必要がありますか?

ベストアンサー1

引用します公式文書:

実際のオブジェクトをスパイする際の重要な注意点!

場合によっては、スタブスパイに 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();

おすすめ記事