我试图在不使用@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/