【发布时间】:2015-08-28 20:23:44
【问题描述】:
当我将@Secured 添加到服务类中的任何方法并测试服务类时,我的模拟没有被拾取。当我测试一种不安全的方法时,甚至会发生这种情况。我不明白这是否是由于未使用模拟或被覆盖。
public class Service {
@Autowired
private DAO dao;
public void method1() {
...
//System.out.println("DEBUG:" + dao.hashCode());
dao.XXX();
...
}
@Secured("...") // added second time (Case 2)
public void method2() {
...
dao.XXX();
...
}
}
public class ServiceTest {
@Mock
private DAO dao;
@InjectMocks
@Autowired
private Service service;
@Before
public void beforeTest() {
MockitoAnnotations.initMocks(this);
}
public void testMethod1() {
Mockito.when(dao.XXX()).thenReturn(...);
//System.out.println("DEBUG:" + dao.hashCode());
...
}
public void testMethod2() {
Mockito.when(dao.XXX()).thenReturn(...);
...
}
}
案例 1: 我在方法2上没有@Secured的情况下测试方法1(testMethod1),一切正常。我的预期结果与 Mock dao 返回的结果相符。
案例 2 我将@Secured 添加到method2 并重新运行testMethod1。测试完成,但结果与 Mock dao 不匹配。实际使用过dao,实际结果与数据库数据相符。
我使用DEBUG语句打印ServiceTest类和Service类中dao的hashcode。在案例 1 中,它们是相同的。在案例 2 中,它们是不同的。
显然,当我添加@Secured 时发生了一些事情。我想知道那是什么。
【问题讨论】:
标签: java spring spring-security mockito