只是想知道如何使用EasyMock或PowerMock从方法模拟Class类型的返回对象?
我正在尝试模拟此接口方法的返回类型
Class<T> getRootBeanClass();
我尝试了以下但没有快乐
EasyMock.expect(mockViolation.getRootBeanClass()).andReturn(EasyMock.anyObject());
我收到此错误消息
java.lang.IllegalStateException: matcher calls were used outside expectations
非常感谢任何帮助
答案 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:请阅读他们的文档 - 因为您必须启用模拟最终课程 - 这是目前的实验性功能。