写点什么

集成测试时 MockMvc 无法注入

作者:程序员小航
  • 2022 年 6 月 16 日
  • 本文字数:667 字

    阅读完需:约 2 分钟

如果阅读过 使用 Junit 编写单元测试 的小伙伴都知道,在写对 Controller 进行单元测试时,会将 Service 层进行 Mock。


大概样子如下:



但是除了单元测试,还需要写集成测试,就是模拟全流程的请求。


集成测试同样使用的是 MockMvc,但是如果像单元测试一样加上 @WebMvcTest 就不太可以,因为 Service 代码没有 mock 掉,就会报错。



可以用以下两种方式解决该问题:

方法一

移除 @Autowired 注解,并手动声明 MockMvc。


在 @Before 中使用 MockMvcBuilders.webAppContextSetup 即可手动声明 MockMvc。


@WebAppConfiguration@RunWith(SpringRunner.class)@SpringBootTestpublic class UserInfoControllerTest {
@Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; @Before public void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } // ... 省略}
复制代码

方法二

使用 @AutoConfigureMockMvc 注解,这样就可以使用 @Autowired 即可注入 MockMvc 对象。


@WebAppConfiguration@AutoConfigureMockMvc(addFilters = false)@RunWith(SpringRunner.class)@SpringBootTestpublic class AccessRecordControllerTest {
@Autowired private MockMvc mockMvc;
// ... 省略}
复制代码


注意:

需要添加 addFilters = false 否则可能会导致走 AntBuservice 过滤器,导致需要登录,从而集成测试失败


近期在开发中写单元测试比较多,并且在写单元测试时也遇到不少问题,以及总结了一些心得,后续会总结相关文章。

发布于: 刚刚阅读数: 5
用户头像

个人公众号:『 程序员小航 』 2020.07.30 加入

某不知名互联网公司 Java 程序员一枚。记录工作学习中的技术、开发及源码笔记;分享生活中的见闻感悟。

评论

发布
暂无评论
集成测试时 MockMvc 无法注入_Java_程序员小航_InfoQ写作社区