在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
}
}
最佳答案
调用setter方法而不是访问字段。