集成测试时 MockMvc 无法注入

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

大概样子如下:

集成测试时 MockMvc 无法注入

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

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

集成测试时 MockMvc 无法注入

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

方法一

移除 @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多平台发布

发表评论

相关文章