模拟不与@Secured一起使用
Mock not used with @Secured
当我向服务 class 中的任何方法添加 @Secured 并测试服务 class 时,我的模拟没有被提取。当我测试不安全的方法时甚至会发生这种情况。我不明白是否是由于模拟未被使用或被覆盖。
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(...);
...
}
}
案例一:
我在方法 2 上没有 @Secured 的情况下测试方法 1 (testMethod1),一切正常。我的预期结果符合 Mock dao returns.
案例二
我将 @Secured 添加到 method2 并重新 运行 testMethod1。测试完成但结果与 Mock dao 不匹配。实际dao已使用,实际结果与数据库数据匹配
我使用 DEBUG 语句在 ServiceTest class 和服务 class 中打印 dao 的哈希码。在案例 1 中,它们是相同的。在案例 2 中,它们是不同的。
显然,当我添加 @Secured 时发生了一些事情。我想知道那是什么。
假设你使用的是SpringJUnit4ClassRunner
,区别可能在于Spring正在围绕你的服务创建一个代理来处理@Secured
注解,而Mockito无法处理注入代理中的 dao。
顺便说一句,@Asynchronous
、@Transactional
和 co.
也会发生同样的情况
我建议使用 MockitoRunner(忘记 Spring),或者,如果您确实需要结合使用 Spring 和 Mockito,请使用 springockito
当我向服务 class 中的任何方法添加 @Secured 并测试服务 class 时,我的模拟没有被提取。当我测试不安全的方法时甚至会发生这种情况。我不明白是否是由于模拟未被使用或被覆盖。
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(...);
...
}
}
案例一: 我在方法 2 上没有 @Secured 的情况下测试方法 1 (testMethod1),一切正常。我的预期结果符合 Mock dao returns.
案例二 我将 @Secured 添加到 method2 并重新 运行 testMethod1。测试完成但结果与 Mock dao 不匹配。实际dao已使用,实际结果与数据库数据匹配
我使用 DEBUG 语句在 ServiceTest class 和服务 class 中打印 dao 的哈希码。在案例 1 中,它们是相同的。在案例 2 中,它们是不同的。
显然,当我添加 @Secured 时发生了一些事情。我想知道那是什么。
假设你使用的是SpringJUnit4ClassRunner
,区别可能在于Spring正在围绕你的服务创建一个代理来处理@Secured
注解,而Mockito无法处理注入代理中的 dao。
顺便说一句,@Asynchronous
、@Transactional
和 co.
我建议使用 MockitoRunner(忘记 Spring),或者,如果您确实需要结合使用 Spring 和 Mockito,请使用 springockito