EasyMock 和返回泛型的方法 class

EasyMock and methods returning a generic class

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

我正在尝试模拟此接口方法的 return 类型

Class<T> getRootBeanClass();

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

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

我收到此错误消息

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

非常感谢任何帮助

anyObject() 是一个 argument 匹配器。

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

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

对比

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

return 的对象必须是 真实的 现有对象(可以模拟,也可以不模拟).但是 anyObject() 不会为您创建对象!

EasyMock 无法为您生成泛型 - 因此需要强制转换,例如:

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

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

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