0

我有一个没有接口的对象(我无法更改它),我可以使用它来模拟它

Mock mockedClass = mock(ObjectExample.class, "returnObject",
            new Class[ ]{java.lang.Integer, java.lang.Integer},
            new Object[ ]{1,9001});

该对象已成功模拟,在调试时我可以看到参数已成功设置,我的问题是如何使用此模拟对象;例如,我将如何返回对象returnOnject以供稍后在代码中使用,并模拟对该对象的调用?

编辑:我将 JMock 与 CGLIB 一起使用

4

1 回答 1

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();
}
于 2013-12-02T08:39:20.127 回答