我正在使用 Mockito 1.9.0。我想在 JUnit 测试中模拟一个类的单个方法的行为,所以我有
final MyClass myClassSpy = Mockito.spy(myInstance); Mockito.when(myClassSpy.method1()).thenReturn(myResults);
问题是,在第二行中,myClassSpy.method1()实际上是被调用,导致异常。我使用模拟的唯一原因是以后,无论何时myClassSpy.method1()调用,都不会调用真正的方法,而是myResults返回对象。
myClassSpy.method1()
myResults
MyClass是一个接口,并且myInstance是一个实现,如果这很重要的话。
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);
有时不可能使用 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();