package com.xfs.test; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpSession; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; /** * 集成Web环境方式 springmvc mock测试 * * @author admin * * 2017年11月23日 上午11:12:43 */ @RunWith(JUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { "classpath*:spring/*.xml" }) public class TestApiTwo extends AbstractJUnit4SpringContextTests { @Autowired public WebApplicationContext wac; public MockMvc mockMvc; public MockHttpSession session; @Before public void before() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @Test public void testGetSequence() { try { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/api/getSequence")) .andExpect(MockMvcResultMatchers.status().is(200)) .andDo(MockMvcResultHandlers.print()) .andReturn(); int status = mvcResult.getResponse().getStatus(); System.out.println("请求状态码:" + status); String result = mvcResult.getResponse().getContentAsString(); System.out.println("接口返回结果:" + result); JSONObject resultObj = JSON.parseObject(result); // 判断接口返回json中success字段是否为true Assert.assertTrue(resultObj.getBooleanValue("success")); } catch (Exception e) { e.printStackTrace(); } } }
运行结果和上面独立测试时候一样。
总结:
整个过程:
1、mockMvc.perform执行一个请求;
2、MockMvcRequestBuilders.get("/user/1")构造一个请求
3、ResultActions.andExpect添加执行完成后的断言
4、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
5、ResultActions.andReturn表示执行完成后返回相应的结果。
整个测试过程非常有规律:
1、准备测试环境
2、通过MockMvc执行请求
3、添加验证断言
4、添加结果处理器
5、得到MvcResult进行自定义断言/进行下一步的异步请求
6、卸载测试环境