我使用this blog中的代码在单元测试中注入Mockito模拟。但是,在模拟自动装配之前,它将由Spring在JDK代理中包装。这导致任何验证(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”。
由于
答案 0 :(得分:0)
如果您将模拟器自动装配到setter方法中,则可以在那里手动打开它。
@Autowired public setMockedService(MyServiceInterface service) {
mockedService = unwrapped(service) // to implement unwrapped(), you might use AOPUtils
}
这很难看,但如果没有proxy-target-class
另一方面,如果嘲笑给你带来这么大的痛苦,你不应该看一个存根解决方案吗?
答案 1 :(得分:0)
最新版本的Mockito(目前为1.9.0)修复了此问题,更改了检测对象是否为模拟的算法。