Java 模仿一个无效的方法
这是我第一次尝试使用EasyMock。因此,我一直在尝试模拟一个Java 模仿一个无效的方法,java,junit,easymock,Java,Junit,Easymock,这是我第一次尝试使用EasyMock。因此,我一直在尝试模拟一个void方法: protected void onStop() { logger.info("Stopping ReporterService."); if (reporter != null) { reporter.stop(); reporter = null; } } 我在网上学习了一些教程,并写了以下内容: ReporterService reporterServi
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():应为1,实际为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.应首先使用setInternelState设置reporter对象 2.您的方法需要调用reporter.stop(),因此您的测试应该需要该方法 请看下面的代码。您可以在末尾添加断言
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);
现在还不清楚你到底想测试什么。你在测试记者是否被阻止?如果是这样的话,你应该取而代之的是嘲笑记者。乍一看,你的测试代码看起来不错。因此,接下来要研究的是。。。您的问题中缺少的东西是:正在测试的代码。即使您确定Whitebox.getInternalState()。。。应该在其参数上调用onStop。。。您最好在此处发布该代码(请参阅)。没有这些,我们就无能为力!您不需要PowerMock来模拟void方法。另外,您不需要
expectLastCall()
,它确实存在于EasyMock中,但不是必需的。我还建议您使用静态导入。您将获得reporter.onStop();重播(reporterService1,reporter)代码>