【问题标题】:Expecting anything as parameter to mock using EasyMock期望任何东西作为参数来模拟使用 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);

这可能吗?如何实现?

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

【问题讨论】:

    标签: java unit-testing tdd mocking easymock


    【解决方案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 答案中所示。
    • 有趣。感谢分享:)
    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多