这是我第一次尝试使用 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"));
答案 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);