在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