【发布时间】:2017-11-20 13:42:04
【问题描述】:
我正在尝试在不使用 @DataJpaTest 的情况下生成集成测试,以便更好地理解这些概念。 我注意到使用反射我无法在我的被测服务层中获取或设置 The Dao。因此,当访问使用反射 API 获得的 Dao 时,它会返回 NullPointerException。我已经测试了 Spring Framework 的 Java Reflection API 和 ReflectionTestUtils。这是代码的sn-p
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 框架实现)?谢谢!
【问题讨论】:
-
你能把完整的堆栈跟踪。 userDao 是 null 还是在其他内部调用中抛出 NullPointer?
-
RestController 中的 userDao 属性为空,因此当我尝试使用反射获取它时,我得到一个空对象。我不知道如何从我的集成测试中访问 @Autowired UserDao 接口。
-
您正在手动创建
UserServiceImpl。您应该自动装配它并让 spring 创建对象。然后它将填充所有依赖项。
标签: java spring testing integration-testing dao