在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方法而不是访问字段。

09-04 04:49