1.简介
MockMvc是服务端 Spring MVC测试支持的主入口点。可以用来模拟客户端请求,用于测试。
一般情况Service层和Controller层需要进行单测
2.使用
不带参
@SpringBootTest
class StuControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Test
void getAll() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
mockMvc.perform(MockMvcRequestBuilders
.get("/stu")
.contentType(MediaType.APPLICATION_FORM_URLENCODED))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers
.jsonPath("$.code")
.value("200"))
.andDo(MockMvcResultHandlers.print())
.andReturn()
.getResponse()
.getContentAsString(Charset.defaultCharset()); //防止中文乱码
}
}
带参
@Test
void save() throws Exception {
String content = JsonString.json;
mockMvc.perform(MockMvcRequestBuilders
.post("/stu")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers
.jsonPath("$.code")
.value("200"))
.andDo(MockMvcResultHandlers.print())
.andReturn()
.getResponse()
.getContentAsString(Charset.defaultCharset());
}
3.自动注入MockMvc
添加注解@AutoConfigureMockMvc(addFilters = false)
需要添加 addFilters = false 否则可能会导致走 AntBuservice 过滤器,导致需要登录,从而集成测试失败
@SpringBootTest
@AutoConfigureMockMvc(addFilters = false)
class StuControllerTest {
@Autowired
private MockMvc mockMvc;
}