热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集成测试时MockMvc无法注入

如果阅读过使用Junit编写单元测试的小伙伴都知道,在写对Controller进行单元测试时,会将Service层进行Mock。大概样子如下:但是除了单元测试,还需要写集成测试,就

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

大概样子如下:

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

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

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


方法一

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

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

@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest
public 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)
@SpringBootTest
public class AccessRecordControllerTest {
@Autowired
private MockMvc mockMvc;
// ... 省略
}

注意:

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


本文由mdnice多平台发布



推荐阅读
author-avatar
凯蜜斯特
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有