反射不适用于Spring自动装配的参数

时间:2017-11-20 13:42:05

标签: java spring testing integration-testing dao

我正在尝试在不使用@DataJpaTest的情况下生成集成测试,以便更好地理解这些概念。 我注意到,使用Reflection我无法在我测试的服务层中获取或设置Dao。因此,当使用Reflection 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(使用@Autowired注释的Spring框架扩展JpaRepository的接口。

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

1 个答案:

答案 0 :(得分:1)

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

@Autowired
UserDao userDao;

@Autowired
UserServiceImpl userService;

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

我怀疑测试中的Spring配置存在问题,导致userDao无法自动连接。