我有一个没有接口的对象(我不能改变它),我能够使用
来模拟它Mock mockedClass = mock(ObjectExample.class, "returnObject",
new Class[ ]{java.lang.Integer, java.lang.Integer},
new Object[ ]{1,9001});
此对象已成功模拟,并且在调试时我可以看到参数已成功设置,我的问题是如何使用此模拟对象;例如,如何返回对象returnOnject
以便稍后在代码中使用,并模拟对该对象的调用?
编辑:我正在使用JMock和CGLIB
答案 0 :(得分:0)
如果我是你,我不会在单元测试之外使用jMock,而是直接使用代理框架,如cglib或javassist。您可以创建ObjectExample
的代理,它基本上代表此模拟类的子类。然后,您可以按ObjectExample
的类型使用此子类对象。
以下是如何使用cglib创建代理的示例:
@Test
public void testMethodInterceptor() throws Exception {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(ObjectExample.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
throws Throwable {
if(method.getName().equals("returnObject")) {
// Add your proxy logic here.
} else {
proxy.invokeSuper(obj, args);
}
}
});
ObjectExample proxy = (ObjectExample) enhancer.create();
}