模拟不与@Secured一起使用

时间:2015-08-28 20:23:44

标签: java spring spring-security mockito

当我将@Secured添加到服务类中的任何方法并测试服务类时,我的模拟没有被提取。当我测试一个不安全的方法时,甚至会发生这种情况。我不明白是否是由于模拟没有被使用或被覆盖。

git rebase -i

案例1: 我在没有@Secured on method2的情况下测试method1(testMethod1),一切正常。我的预期结果与Mock dao返回的结果相符。

案例2 我将@Secured添加到method2并重新运行testMethod1。测试完成但结果与Mock dao不匹配。已使用实际dao,实际结果与数据库数据匹配。

我使用DEBUG语句在ServiceTest类和Service类中打印dao的哈希码。在案例1中,它们是相同的。在案例2中,它们是不同的。

显然,当我添加@Secured时会发生一些事情。我想知道那是什么。

1 个答案:

答案 0 :(得分:1)

假设您正在使用SpringJUnit4ClassRunner,区别可能是Spring正在您的服务周围创建代理以处理@Secured注释,而Mockito无法处理代理中的dao注入。

顺便说一下,@Asynchronous@Transactional和co。

会发生同样的情况。

我建议使用MockitoRunner(忘记Spring),或者,如果你真的需要将Spring和Mockito结合起来,请使用springockito