如何使用 EasyMock 测试 void 方法

Posted

技术标签:

【中文标题】如何使用 EasyMock 测试 void 方法【英文标题】:How to test void methods using EasyMock 【发布时间】:2012-07-27 16:30:19 【问题描述】:

我已经看到了一些关于此的问题,但我似乎无法理解我的特定问题的任何答案。

我有一个模拟对象,让我们调用“object1”,我将它发送到某个方法进行测试,让我们调用 testMethod()。所以我最终打电话给

testMethod(object1);

用于测试。现在在这个testMethod中的某个地方,会有一个调用方法的部分

object1.toggleDisplay();

这是一个无效的方法。如果方法像

object1.getDisplay()

它实际上返回的东西,我通常这样做

EasyMock.expect(object1.getDisplay()).andReturn(whatever);

但是,这是一个 void 方法,我想测试一下它确实被调用了一定次数。最简单的方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

如果过去几年情况没有改变,您可以在设置期望时使用expectLastCall

object1.toggleDisplay();
object.expectLastCall();

【讨论】:

等等,所以我必须将 object.expectLastCall() 放入我的实际方法中?我将单元测试类和实际程序类分开,并且不希望在实际程序中包含单元测试代码。 不,您将方法调用和expectLastCall().times(NUM_TIMES) 放在您之前使用EasyMock.expect(object1.getDisplay()).andReturn(whatever) 的单元测试中 我有什么办法可以针对特定方法执行此操作吗?例如,我有方法 toggleOn() 和 toggleOff() 是的:只需在每个方法期望后添加expectLastCall()。它适用于最后(最近)调用的定义 :-) 如果有疑问,请尝试一下!【参考方案2】:
object1.toggleDisplay();
EasyMock.expectLastCall().times(5);

或者如果您静态导入 EasyMock 方法:

import static org.easymock.EasyMock.*;

[...]

object1.toggleDisplay();
expectLastCall().times(5);

【讨论】:

以上是关于如何使用 EasyMock 测试 void 方法的主要内容,如果未能解决你的问题,请参考以下文章

使用easymock,重复void方法调用

带有 void 方法的 EasyMock 期望

EasyMock:无效方法

EasyMock简单使用方法

如何在Java Unit Test中mock 静态方法

使用 EasyMock 测试方法的异常