导包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
//单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@WebAppConfiguration
public class SpringbootDemoApplicationTests {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setUp() throws Exception {
// mvc = MockMvcBuilders.standaloneSetup(new CustomerController()).build();
mvc = MockMvcBuilders.webAppContextSetup(context).build();//建议使用这种
}
@Test
public void contextLoads() throws Exception {
MvcResult mvcR = mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
// .andExpect(MockMvcResultMatchers.status().isOk())
// .andDo(MockMvcResultHandlers.print())
.andReturn();
String content = mvcR.getResponse().getContentAsString();
System.out.println("内容:"+content);
}
}
MockMvc解析
我在上面代码中进行了标记,我们按照标记进行讲解,这样会更明白一些:
- perform方法其实只是为了构建一个请求,并且返回
ResultActions
实例,该实例则是可以获取到请求的返回内容。 MockMvcRequestBuilders
该抽象类则是可以构建多种请求方式,如:Post、Get、Put、Delete等常用的请求方式,其中参数则是我们需要请求的本项目的相对路径,/则是项目请求的根路径。- param方法用于在发送请求时携带参数,当然除了该方法还有很多其他的方法,大家可以根据实际请求情况选择调用。
- andReturn方法则是在发送请求后需要获取放回时调用,该方法返回MvcResult对象,该对象可以获取到返回的视图名称、返回的Response状态、获取拦截请求的拦截器集合等。
- 我们在这里就是使用到了第4步内的MvcResult对象实例获取的MockHttpServletResponse对象从而才得到的Status状态码。
- 同样也是使用MvcResult实例获取的MockHttpServletResponse对象从而得到的请求返回的字符串内容。【可以查看rest返回的json数据】
- 使用Junit内部验证类Assert判断返回的状态码是否正常为200
- 判断返回的字符串是否与我们预计的一样。
链接:https://www.jianshu.com/p/d8f844711bf4