嘲弄虚空方法

时间:2016-11-08 18:38:08

标签: java junit easymock

这是我第一次尝试使用 EasyMock 。所以,我一直在尝试模拟void方法:

protected void onStop() {
    logger.info("Stopping ReporterService.");

    if (reporter != null) {
        reporter.stop();
        reporter = null;
    }
}

我在线阅读了一些教程,并写了这个:

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class);

reporterService1.onStop();
EasyMock.expectLastCall().once();
replay(reporterService1);

//EasyMock.replay(reporterService1);
assertNull(Whitebox.getInternalState(reporterService1, "reporter"));
EasyMock.verify(reporterService1);

但后来我明白了:

  

java.lang.AssertionError:
验证时出现预期失败:
      ReporterService.onStop():expected:1,actual:0

我在网上搜索,但我不知道为什么会这样说。感谢帮助。

另外,为了便于理解,我手动测试了它并且它可以工作,我只想用Easymock测试它:

ReporterService reporterService = new ReporterService();
Reporter reporter = new Reporter(null,null,null);

Whitebox.setInternalState(reporterService , "reporter", reporter);
assertNotNull(Whitebox.getInternalState(reporterService, "reporter"));

reporterService.onStop();
assertNull(Whitebox.getInternalState(reporterService, "reporter"));

1 个答案:

答案 0 :(得分:-1)

我认为这应该可以解决您的问题。 1.您应该首先使用setInternelState设置报告对象 2.your方法期待对reporter.stop()进行调用,因此您的Test应该期望该方法。

请看下面的代码。您可以在结尾处添加断言。

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class);
Reporter reporter = EasyMock.createMock(Reporter.class);

Whitebox.setInternalState(reporterService , "reporter", reporter);
reporter.onStop();
PowerMock.expectLastCall();

EasyMock.replay(reporterService1,reporter);

reporterService1.onStop();

EasyMock.verify(reporterService1,reporter);
相关问题