代码之家  ›  专栏  ›  技术社区  ›  Rylander

EasyMock“预期”调用数大于“times”方法中设置的值

  •  0
  • Rylander  · 技术社区  · 11 年前

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   Community leo1    7 年前

    事情是这样的。

    The javadoc for expect() states

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

    有了这些电话

    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() 只是一个静态方法调用。你不能嘲笑这一点。 Or maybe you can.