私は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();