反射不适用于 Spring 自动装配参数
Reflection not working for Spring autowired parameters
我试图在不使用@DataJpaTest 的情况下生成集成测试,以便更好地理解这些概念。
我注意到使用反射我无法在我的被测服务层中获取或设置 The Dao。因此,当涉及到通过反射 API 访问 Dao 时,它 returns 出现 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 中我注入 UserDao(使用 Spring 框架的 @Autowired 注释扩展 JpaRepository 的接口。
如何从我的服务访问 Dao(由 Spring 框架实现)?谢谢!
一个方便的技巧是通过验证您的自动装配的依赖项是否确实自动装配来确保您的测试 Spring 配置正常工作。例如:
@Autowired
UserDao userDao;
@Autowired
UserServiceImpl userService;
@Test
public void verifySpringContext() {
assertNotNull(userDao);
assertNotNull(userService.getUserDao());
}
我怀疑您的测试中的 Spring 配置存在问题,导致无法自动装配 userDao。
我试图在不使用@DataJpaTest 的情况下生成集成测试,以便更好地理解这些概念。 我注意到使用反射我无法在我的被测服务层中获取或设置 The Dao。因此,当涉及到通过反射 API 访问 Dao 时,它 returns 出现 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 中我注入 UserDao(使用 Spring 框架的 @Autowired 注释扩展 JpaRepository 的接口。
如何从我的服务访问 Dao(由 Spring 框架实现)?谢谢!
一个方便的技巧是通过验证您的自动装配的依赖项是否确实自动装配来确保您的测试 Spring 配置正常工作。例如:
@Autowired
UserDao userDao;
@Autowired
UserServiceImpl userService;
@Test
public void verifySpringContext() {
assertNotNull(userDao);
assertNotNull(userService.getUserDao());
}
我怀疑您的测试中的 Spring 配置存在问题,导致无法自动装配 userDao。