0

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

4

1 回答 1

1

所以这是怎么回事。

expect()状态的 javadoc

expect(T value) 返回当前线程中最后一次预期调用的期望设置器。

有了这些电话

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()只是一个静态方法调用。你不能嘲笑它。或者也许你可以。

于 2013-10-03T20:43:49.323 回答