我试图在不使用@DataJpaTest的情况下生成集成测试,以便更好地理解概念。
我已经注意到,通过反射,我无法在受测试的Service层中获取或设置The Dao。因此,当访问反射API提供的Dao时,它将返回NullPointerException。我已经测试了Spring Framework的Java Reflection API和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的接口。

如何从Service访问Dao(由Spring框架实现)?谢谢!

最佳答案

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

@Autowired
UserDao userDao;

@Autowired
UserServiceImpl userService;

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


我怀疑您的测试中的Spring配置存在问题,从而阻止了userDao自动接线。

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

10-10 14:35