java - EasyMock "expected"调用次数大于 "times"方法中设置的值

标签 java mocking easymock

在重构一些旧的单元测试时,我添加了一个 verify() 调用来查看某个方法被预期的次数,并且惊讶地发现“预期”调用次数大于实际调用次数使用times()设置。由于某种原因,下一行的期望调用被添加到我的方法中。

为什么会发生这种情况?

测试类

public class SandBoxTest {    
    @Test
    public void shouldGetSand() {
        Sand niceMock = EasyMock.createNiceMock(Sand.class);

        EasyMock.expect(niceMock.sandMethod()).andReturn(1).times(2);
        EasyMock.expect(Box.boxMethod()).andReturn(99).times(11);

        EasyMock.replay(niceMock);

        EasyMock.verify(niceMock);
    }
}

运行时输出

java.lang.AssertionError: 
  Expectation failure on verify:
    Sand.sandMethod(): expected: 13, actual: 0

预期输出

java.lang.AssertionError: 
  Expectation failure on verify:
    Sand.sandMethod(): expected: 2, actual: 0

详细信息: EasyMock v3.1

后续:使用 EasyMock 打开功能请求。 https://jira.codehaus.org/browse/EASYMOCK-128

最佳答案

所以这就是发生的事情。

The javadoc for expect() states

expect(T value) Returns the expectation setter for the last expected invocation in the current thread.

通过这些调用

EasyMock.expect(niceMock.sandMethod()).andReturn(1).times(2);
EasyMock.expect(Box.boxMethod()).andReturn(99).times(11);

在这两种情况下,最后一个预期调用都是 niceMock.sandMethod(),因为它是唯一的 Mock 方法调用,因此它添加了 2+11 = 13

EasyMock 的模拟对象在代理中具有一些计数器,用于注册所调用的内容。

Box.boxMethod() 只是一个静态方法调用。你不能 mock 这一点。 Or maybe you can.

关于java - EasyMock "expected"调用次数大于 "times"方法中设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168673/

相关文章:

java - 如何将 javaScript 函数传递给 Java 方法以充当回调 (Rhino)

python - 如何在 python 单元测试中模拟连接错误和请求超时

c++ - 使用模拟测试迭代代码 - 它有意义吗?

java - EasyMock 期望使用 void 方法和对象数组作为参数?

gradle - Gradle:Emma:无法启动运行时 Controller ,中止&NoClassDefFoundError

java - 如何在处理中更改 mp3 的音量(级别)?

java - 无法解析包含特殊字符的值?使用 sax 解析器

java - Wiremock Stand alone - 如何使用请求数据操作响应

java - 有什么办法可以代替动态方法吗?

java - 使用 Java 测试正则表达式