代码之家  ›  专栏  ›  技术社区  ›  Alessandro Argentieri

反射不适用于弹簧自动连接参数

  •  0
  • Alessandro Argentieri  · 技术社区  · 7 年前

    为了更好地理解概念,我试图在不使用@DataJpaTest的情况下生成一个集成测试。 我注意到,通过反射,我无法在测试的服务层中获取或设置Dao。因此,当使用反射API访问Dao时,它返回一个NullPointerException。我测试了Spring框架的Java反射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 I注入UserDao(使用Spring框架的@Autowired注释扩展JpaRepository的接口)。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Michael Peacock    7 年前

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

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

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