【问题标题】:Mocking a Void method模拟一个 void 方法
【发布时间】:2016-11-08 18:38:07
【问题描述】:

这是我第一次尝试使用 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():预期: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"));

【问题讨论】:

  • 目前还不清楚您实际上要测试什么。你在测试记者被拦住了吗?如果是这样,你应该嘲笑记者。
  • 乍一看,您的测试代码看起来不错。因此,接下来要研究的...是您的问题中缺少的东西:被测代码。即使您确定 Whitebox.getInternalState() ... 应该在其参数上调用 onStop ... 您最好在此处发布该代码(请参阅 stackoverflow.com/help/mcve )。没有它,我们无能为力!

标签: java junit easymock


【解决方案1】:

我认为这应该可以解决您的问题。 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);

【讨论】:

  • 您不需要 PowerMock 来模拟 void 方法。此外,您不需要 expectLastCall(),它确实存在于 EasyMock 但不是强制性的。我还敦促您使用静态导入。你会得到reporter.onStop(); replay(reporterService1, reporter);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多