java - 反射不适用于 Spring Autowiring 参数

标签 java spring testing integration-testing dao

我试图在不使用@DataJpaTest 的情况下生成集成测试,以便更好地理解这些概念。 我注意到使用反射我无法在我的被测服务层中获取或设置 The Dao。因此,当涉及到使用 Reflection API 访问 Dao 时,它会返回 NullPointerException。我已经测试了 Java Reflection API 和 Spring Framework 的 ReflectionTestUtils。这是代码片段

UserService userService;

@Before
public void setUp(){
   userService = new UserServiceImpl();
   UserDao userDao = (UserDao) ReflectionTestUtils.getField(userService, "userDao");
   userDao.deleteAll(); //HERE RETURNS A NULLPOINTER
   ...
}

考虑在 UserServiceImpl.java 中我注入(inject)了 UserDao(使用 Spring 框架的 @Autowired 注释扩展 JpaRepository 的接口(interface)。

如何从我的服务访问 Dao(由 Spring 框架实现)?谢谢!

最佳答案

一个方便的技巧是通过验证 Autowiring 的依赖项实际上是否 Autowiring 来确保您的测试 Spring 配置正常工作。例如:

@Autowired
UserDao userDao;

@Autowired
UserServiceImpl userService;

@Test
public void verifySpringContext() {
    assertNotNull(userDao);
    assertNotNull(userService.getUserDao());
} 

我怀疑您的测试中的 Spring 配置存在问题,导致无法 Autowiring userDao。

关于java - 反射不适用于 Spring Autowiring 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393454/

相关文章:

java - Struts 排除带有 Spring 的图案

ruby-on-rails - 使用 Capybara 和 Javascript 测试重定向

python - 在禁用所有插件的情况下启动 pytest

java - Eclipse:工作区中项目的更改未对导入项目的文件夹进行更改

java - 在 Android 的 SurfaceView 上添加图像

java - 从 Java 打开文档的更好方法?

email - 如何在功能测试中测试电子邮件发送?

java - 从类中获取变量

java - 按方法名称创建 Spring 查询 - 按静态编号排序?

java - Spring MVC - 检查 session 是否存在