在 JUnit 测试中,我想在 Spring DAO 中更改休眠模板。这个 DAO 是
- 用 @Transactional 注释,因此它在运行时被包装,并且
- 被 Mockitos spy()- 方法监视。因此,DAO 将被该间谍第二次包裹。
所以DAO 现在有两个包装对象:一个来自@Transactional,一个来自间谍。由于不知道首先创建哪些包装器,我无法通过反射在 DAO 中设置休眠模板。
如何在双重包装的 DAO 中设置模板?
[编辑]
一些来源:
/**
* This class gets wrapped by a proxy object because of @Transactional.
*/
@Transactional
public class MyDao implements SomeDaoInterface { ... }
在测试类中:
public class MyTestClass {
@Autowired
private MyDao myDao;
@Test
public void myTestMethod() throws Exception {
final MyDao daoSpy = spy(myDao); // Dao gets wrapped with second wrapper
final Field field = MyDao.class.getDeclaredField("template");
field.setAccessible(true);
field.set(daoSpy, mySpecialMockedTemplate); // ERROR: want to inject the template but
// dont know in which wrapper
}
}