Mockito:试图监视方法就是调用原始方法

2022-08-31 04:32:15

我使用的是Mockito 1.9.0。我想在JUnit测试中模拟类的单个方法的行为,所以我有

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

问题是,在第二行中,实际上被调用,导致异常。我使用 mocks 的唯一原因是,以后无论何时调用,都不会调用 real 方法,而是返回对象。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();

答案 2

在我的情况下,使用Mockito 2.0,我必须将所有参数更改为,以便对真正的调用进行存根。any()nullable()


推荐