SpringBoot单元测试中XXXMapper为null

1. 假设你来面试~看图找问题

看图找问题

图中进行如下内容,最后在单元测试中userMapper为null而报错。

  1. 准备了一个HelloController,其中通过userMapper进行了数据库交互并查询到数据列表;
  2. 准备了一个MockMvc,通过StandaloneSetup加载了一个HelloController进行单元测试;

2. 答案与解析

很多人第一反应是去排查图中的user()测试方法,首先任务Mock这里肯定没问题,但实际上,问题恰恰就仅仅出现在这里。先看看行之有效的修复:

  1. 准备了一个WebApplicationContext中测试类内;
  2. 准备了一个MockMvc,通过WebAppContextSetup加载applicationContext进行单元测试;
    答案

其实,通过阅读MockMvc的源码可以得知,StandaloneSetup加载只会初始化Controller的底层的依赖,不会包括Component和其他用户的Bean,那么其中的userMapper自然也就没有被初始化了。
解析


SpringBoot单元测试中XXXMapper为null
https://zhongshijie1995.github.io/posts/30003/
作者
钟世杰
发布于
2020年9月19日
许可协议
BY BY-SA