小编典典

Mockito:试图监视方法正在调用原始方法

all

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

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

问题是,在第二行中,myClassSpy.method1()实际上是被调用,导致异常。我使用模拟的唯一原因是以后,无论何时myClassSpy.method1()调用,都不会调用真正的方法,而是myResults返回对象。

MyClass是一个接口,并且myInstance是一个实现,如果这很重要的话。

我需要做什么来纠正这种间谍行为?


阅读 83

收藏
2022-03-18

共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();
2022-03-18