期望任何东西作为参数来模拟使用 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的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse codan 支持将 C++11 初始化列表作为函数参数