【问题标题】:EasyMock and methods returning a generic classEasyMock 和返回泛型类的方法
【发布时间】:2017-09-05 14:53:13
【问题描述】:

只是想知道如何使用 EasyMock 或 PowerMock 从方法模拟 Class 类型的返回对象?

我正在尝试模拟这个接口方法的返回类型

Class<T> getRootBeanClass();

我尝试了以下但没有任何乐趣

EasyMock.expect(mockViolation.getRootBeanClass()).andReturn(EasyMock.anyObject());

我收到此错误消息

java.lang.IllegalStateException: matcher calls were used outside expectations

非常感谢任何帮助

【问题讨论】:

  • 仅作记录:您可能想删除不再需要的旧 cmets ...

标签: java junit tdd powermock easymock


【解决方案1】:

anyObject() 是一个 argument 匹配器。

您使用它以便 EasyMock 可以区分您提出的不同模拟规范。喜欢:

EasyMock.expect(mock.foo(eq("A"), anyObject()).andReturn(resultForA);

EasyMock.expect(mock.foo(eq("B"), anyObject()).andReturn(resultForB);

返回的对象必须是真实的现有对象(可以被模拟或不被模拟)。但是anyObject() 不会为你创建对象!

EasyMock 无法为您生成泛型 - 所以需要一个演员表,例如:

Class<Foo> foo = (Class<Foo>) mock(Class.class)

但这在这种情况下不起作用 - 因为 java.lang.Class 是最终的!而且 EasyMock 不能模拟最终课程!为此,您需要 PowerMock - 或(我的建议)最新版本的 Mockito。

如果您选择 Mockito:请阅读他们的文档 - 因为您必须启用最终类的模拟 - 目前它是一个实验性功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多