gpt4 book ai didi

java - 多个包裹对象中的反射

转载 作者:行者123 更新时间:2023-12-01 19:12:16 25 4
gpt4 key购买 nike

在 JUnit 测试中,我想更改 Spring DAO 中的 hibernate 模板。这个 DAO 是

  1. 使用 @Transactional 进行注释,以便在运行时进行包装
  2. 被 Mockitos 的 spy ()方法监视。因此 DAO 将被该 spy 第二次包裹。

所以 DAO 现在有两个包装对象:一个来自 @Transactional,一个来自 spy 。由于不知道首先创建哪个包装器,因此我无法通过反射在 DAO 中设置 hibernate 模板。

如何在双重包装的 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 方法而不是访问字段。

关于java - 多个包裹对象中的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8007624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com