期望任何东西作为参数来模拟使用 EasyMock

Posted

技术标签:

【中文标题】期望任何东西作为参数来模拟使用 EasyMock【英文标题】:Expecting anything as parameter to mock using EasyMock 【发布时间】:2011-11-05 21:05:06 【问题描述】:

使用 EasyMock 我希望能够说我期望在我的模拟上调用一个特定的方法,但我不关心用于调用模拟的参数。

SomeInterface mock = EasyMock.createMock(SomeInterface.class);
mock.send(/*anything*/);
replay(mock);

/* Perform actions that will eventually invoke mock */

verify(mock);

这可能吗?如何实现?

另外,如果我想接受派生自特定基类的任何对象,我该如何指定?

【问题讨论】:

【参考方案1】:

接受任何对象作为参数:

mock.send(anyObject());

(您可能需要将表达式转换为所需的类型。)

此外,要接受特定类型的任何对象,请使用:

mock.send(isA(SomeObject.class));

【讨论】:

anyObject(clazz.class) 和 isA(clazz.class) 有什么区别? @ChandraMohan 据我所知,没有anyObject(clazz.class),只有anyObject(),它返回Object的实例,isA(clazz.class)返回clazz类型的实例,这正是它们之间的区别。 PS:anyObject() 是来自 EasyMock 的静态方法。所以,你可以使用EasyMock.anyObject()【参考方案2】:

另外,如果我想接受任何派生自 具体基类,如何指定?

mock.send(anyObject(Myclass.class));

【讨论】:

不!这不起作用!这是我第一次尝试,但是即使实际对象不是从Myclass 派生的,它也会成功验证。这种表示法只是为了避免将结果从anyObject() 转换为mock.send() 期望的结果。它验证该方法是使用派生自Myclass 的类调用的。您必须使用isA(),如 Péter Töröks 答案中所示。 有趣。感谢分享:)

以上是关于期望任何东西作为参数来模拟使用 EasyMock的主要内容,如果未能解决你的问题,请参考以下文章

JMockit 基础:模拟对象、模拟参数、期望

如何在 Kiwi 中为模拟方法设置参数期望

Eclipse codan 支持将 C++11 初始化列表作为函数参数

CORBA 测试自动化

模拟 useHistory 并期望 toBeCalledWith

我应该将啥作为参数传递给期望 NSError** 的方法?