集成测试时 MockMvc 无法注入
如果阅读过 使用 Junit 编写单元测试 的小伙伴都知道,在写对 Controller 进行单元测试时,会将 Service 层进行 Mock。
大概样子如下:
但是除了单元测试,还需要写集成测试,就是模拟全流程的请求。
集成测试同样使用的是 MockMvc,但是如果像单元测试一样加上 @WebMvcTest 就不太可以,因为 Service 代码没有 mock 掉,就会报错。
可以用以下两种方式解决该问题:
方法一
移除 @Autowired 注解,并手动声明 MockMvc。
在 @Before 中使用 MockMvcBuilders.webAppContextSetup 即可手动声明 MockMvc。
复制代码
方法二
使用 @AutoConfigureMockMvc 注解,这样就可以使用 @Autowired 即可注入 MockMvc 对象。
复制代码
注意:
需要添加 addFilters = false 否则可能会导致走 AntBuservice 过滤器,导致需要登录,从而集成测试失败
近期在开发中写单元测试比较多,并且在写单元测试时也遇到不少问题,以及总结了一些心得,后续会总结相关文章。
版权声明: 本文为 InfoQ 作者【程序员小航】的原创文章。
原文链接:【http://xie.infoq.cn/article/dabeee45cd19eee219f88e81b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论