我正在使用 Mockito 1.9.0。我想在 JUnit 测试中模拟一个类的单个方法的行为,所以我有
final MyClass myClassSpy = Mockito.spy(myInstance);
Mockito.when(myClassSpy.method1()).thenReturn(myResults);
问题是,在第二行中,myClassSpy.method1()
实际上被调用,导致异常。我使用模拟的唯一原因是以后,每当调用 myClassSpy.method1()
时,不会调用真正的方法,而 myResults
对象将是回来。
MyClass
是一个接口(interface),而 myInstance
是一个实现,如果这很重要的话。
我需要做些什么来纠正这种 spy 行为?
最佳答案
让我引用 the official documentation :
Important gotcha on spying real objects!
Sometimes it's impossible to use when(Object) for stubbing spies. Example:
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();
https://stackoverflow.com/questions/11620103/