模拟 Void 方法

Mocking a Void method

这是我第一次尝试使用 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:
Expectation failure on verify:
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.You 应首先使用 setInternelState 设置报告对象 2.your 方法需要调用 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);