在JUnit测试中,我想更改Spring DAO中的hibernate模板。这是DAO多个包装对象中的反射
- 注释有@Transactional所以它被运行时期间包裹和
- 由Mockitos间谍()spyed时 - 方法。所以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
}
}
嗨,你可以添加一些示例代码? – Brice