java - Mockito spy 如何知道它何时进行 spy Activity ?

标签 java unit-testing mocking mockito spy

This code from the documentation完全让我困惑:

List list = new LinkedList();
List spy = spy(list);

when(spy.size()).thenReturn(100); // <--- how does this spy know 
// not to call the real method????

//using the spy calls *real* methods
spy.add("one");
spy.add("two");

我明白了,Mockito 很奇怪,并且几乎仍然在 Java 中。令人困惑的是 spy.* 必须先进行完全评估,然后才能知道它是否被包装在 when() 或其他东西中。第一个 spy.* 方法到底怎么会不调用真实对象,而后面的方法却调用呢?

最佳答案

根据文档,第一个 when(spy.size()).thenReturn(100) 实际上会调用真正的 List.size() 方法,请参阅: http://mockito.github.io/mockito/docs/current/org/mockito/Mockito.html#13

当然,每个后续调用都会返回模拟结果。

如果您不希望调用真正的方法(例如 when(spy.get(0)).thenReturn(...) 可能会抛出 IndexOutOfBoundsException code>,您必须使用此模式:doReturn(...).when(spy).get(0);

关于java - Mockito spy 如何知道它何时进行 spy Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26920198/

相关文章:

mocking - 为什么要麻烦模拟存储库?

java - 从另一个配置附加依赖项

java - 如何将字符串转换为 fragment 文件名

java - 如果大小大于 ~10MB,则无法读取整个文本文件

c# - VS2010中用MSTest测试运行报错

java - mockito 如何帮助减少测试用例

java - 如何向 Artifactory 添加一些非开源 jar,以便它们可以被另一个 Gradle/Maven 项目拉取

.net - MS 研究国际象棋的替代方案?

javascript - 单元测试编译的 JavaScript?

python - 如何模拟对 __next__ 的调用