SpringBoot单元测试中XXXMapper为null
1. 假设你来面试~看图找问题
图中进行如下内容,最后在单元测试中userMapper
为null而报错。
- 准备了一个
HelloController
,其中通过userMapper
进行了数据库交互并查询到数据列表; - 准备了一个
MockMvc
,通过StandaloneSetup
加载了一个HelloController
进行单元测试;
2. 答案与解析
很多人第一反应是去排查图中的user()
测试方法,首先任务Mock
这里肯定没问题,但实际上,问题恰恰就仅仅出现在这里。先看看行之有效的修复:
- 准备了一个
WebApplicationContext
中测试类内; - 准备了一个
MockMvc
,通过WebAppContextSetup
加载applicationContext
进行单元测试;
其实,通过阅读MockMvc
的源码可以得知,StandaloneSetup
加载只会初始化Controller
的底层的依赖,不会包括Component
和其他用户的Bean
,那么其中的userMapper
自然也就没有被初始化了。
SpringBoot单元测试中XXXMapper为null
https://zhongshijie1995.github.io/posts/30003/