在重构一些旧的单元测试时,我添加了一个 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/