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

我正在使用 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/

相关文章:

java - 从字符串中删除所有出现的 char

java - 如何将输出流转换为输入流?

java - 是什么导致错误 "No enclosing instance of type Foo

java - 使用 Mockito 模拟静态方法

java - Java 的 UUID.randomUUID 有多好?

java - 什么是 "continue"关键字,它在 Java 中是如何工作的?

java - Java的隐藏特性

java - 什么是类路径以及如何设置它?

java - SPI和API之间的区别?

java - 在 Java 中使用 instanceof 对性能的影响