EasyMock和返回泛型类的方法

时间:2017-09-05 14:53:13

标签: java junit tdd powermock easymock

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

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

Class<T> getRootBeanClass();

我尝试了以下但没有快乐

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

我收到此错误消息

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

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

anyObject()参数匹配器。

您可以使用它,以便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:请阅读他们的文档 - 因为您必须启用模拟最终课程 - 这是目前的实验性功能。