EasyMock:没有检查严格模拟的时间行为

时间:2012-02-23 18:24:06

标签: java easymock

我的单元测试包含对我的DAO的“严格”模拟。除了下面的@Test之外,我的模拟行为对于所有测试都是通用的。因此,我在@Before方法中添加了这种常见的模拟行为。然后将专家模拟行为添加到@Test本身:

@Before
public void setUp() {
    reset(myDAO);
    expect(myDAO.findMyObjects(code, myID)).andReturn(myObjects).times(1);
    expect(myDAO.findMyObjects(myID)).andReturn(myObjects).times(1);
    replay(myDAO);
}

@Test
public void testMyFirstMethod() {
    reset(myDAO);
    expect(myDAO.findMyObjects(myID)).andReturn(new ArrayList<MyObject>()).times(200);
    replay(myDAO);

    Set<OtherObject> otherObjects = myTestClass.myTestMethod(null, myID);
    assertEquals("Empty set is returned", 0, otherObjects.size());
}

我已经检查过.times(1)行为在我的其他单元测试中得到了验证。但是,在上面的测试中,没有验证.times(200)行为(因为我的单元测试只调用一次)。 这是为什么?

1 个答案:

答案 0 :(得分:3)

您需要使用EasyMock.verify(myDAO)告诉EasyMock重播已完成,现在应该满足期望。

当你只调用myTestMethod一次时,EasyMock不知道它必须在方法完成之前检查myDAO,所以它等待更多的调用,然后方法成功返回而没有EasyMock注意到findMyObjects没有被召唤足够多次。

至于为什么times(1)行为得到验证,我不确定,但我怀疑验证可能会被其他测试触发。

那就是说,你的@Before方法组织真的没有了。您正在设定期望,开始重播,重置,然后再次重播?