Mockito和Spring一起嘲笑:“传递给验证的参数()不是模拟!”

时间:2010-10-05 20:53:11

标签: spring javabeans mockito

我使用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”。

由于

2 个答案:

答案 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)修复了此问题,更改了检测对象是否为模拟的算法。