jmock最简单的情况不起作用

时间:2014-04-05 21:15:39

标签: java jmock

这是我的JMock测试:

@Test
public void testRunModuleOK() {
    App instance = getInstanceApp(window,logger);
    Mockery context = new JUnit4Mockery();
    final Modulable m = context.mock(Modulable.class);

    context.checking(new Expectations() {{
        oneOf(m).init(logger);
        oneOf(m).start();
    }});

    instance.runModule(m);

}

那就是runModule:

void runModule(Modulable module) {
    if(module == null) 
        throw new NullPointerException("Module is null");
    module.init(mainLogger);
    runningModules.add(module);
    module.start();
}

我希望我的测试确保始终调用init()和start()一次。 不幸的是,当我在runModule中注释掉module.init和module.start时,测试仍然通过。我使用println来确保调用代码和测试。 奇怪的是,当我两次调用init(或启动)时,我会按预期失败。此外,当我从期望中评论出'oneOf ...'时,我也会失败。 如果在runModule中没有调用module.init和/或module.start,为什么测试通过? 感谢。

1 个答案:

答案 0 :(得分:0)

您错过了验证步骤,该步骤告诉JMock您的测试已完成,并且应该关闭所有未完成的检查。在模拟上下文中调用assertIsSatisfied()

或者,从使用Mockery context = new JUnit4Mockery();切换到使用@Rule public JUnitRuleMockery context = new JUnitRuleMockery();。这将为你删除一些样板。