2

我使用这个博客中的代码在我的单元测试中注入了 Mockito 模拟。但是,在模拟自动装配之前,它会被 Spring 包装在 JDK 代理中。这会导致任何 verify(autowiredMock) 抛出“传递给 verify() 的参数不是模拟!” . 当 Mockito 检查传递给 verify(..) 的参数是否是此方法中有效的 Mockito 模拟对象时,将引发异常:

private static Method getCallbacksSetter(Class type, String methodName) throws NoSuchMethodException {
    return type.getDeclaredMethod(methodName, new Class[]{ Callback[].class });
}

我的问题是如何告诉 Spring 不要代理我在 BeanFactoryPostProcessor 中注册的 Mockito 模拟 bean?请注意,我想避免设置 proxy-target-class="true"。

谢谢

4

2 回答 2

0

如果你将 mock 自动装配到一个 setter 方法中,你可以在那里手动解开它。

@Autowired public setMockedService(MyServiceInterface service) {
    mockedService = unwrapped(service) // to implement unwrapped(), you might use AOPUtils
}

它很丑,但它是一个没有的出路proxy-target-class

顺便说一句,如果嘲弄给您带来如此多的痛苦,您不应该寻找存根解决方案吗?

于 2011-01-07T20:24:30.100 回答
0

最新版本的 Mockito(当前为 1.9.0)已修复此问题,更改了检测对象是否为模拟对象的算法。

于 2012-05-09T13:17:03.630 回答