MockMvc

MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。

开发步骤:

  • 接口:

    1
    2
    3
    4
    5
    6
    7
    @GetMapping ("/logger")
    @ResponseBody
    public string testLogger () {
    Logger logger = LoggerFactory.getLogger(this.getClass())
    logger.debug ("测试级别日志");
    return "SUCCESS";
    }
  • 在test包下创建一个测试类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    @SpringBootTest(classes = {SpringbootApplication.class },webEnvironment =SpringBootTest.WebEnvfironment.RANDOM_PORT)
    )
    @AutoConfigureMockMvc
    public class MockMvcTestor{
    @Resource
    private MockMvc mockMvc;

    @Test
    @DisplayName("测试用例名称")
    public void testMock1() throws Exception{
    MvcResult res = mockMvc.perform(MockMvcRequestBuilders.get("/logger"))
    // 对状态码进行校验
    .andExpect(MockMvcResultMatchers.status().isok())
    // 对比内容
    .andExpect(MockMvcResultMatchers.content().string("SUCCESS"))
    // 结果正确后打印结果
    .andDo(MockMvcResultHandlers.print())
    // 真正执行请求
    .andReturn();
    }

    @Test
    @DisplayName("高级用法")
    public void testMock2() throws Exception{
    MvcResult res = mockMvc.perform(MockMvcRequestBuilders.get("/logger")
    .header("token","123456")
    .param("id","123"))
    // 对状态码进行校验
    .andExpect(MockMvcResultMatchers.status().isok())
    // 对比内容
    .andExpect(MockMvcResultMatchers.jsonPath("access token").value("123456"))
    // 结果正确后打印结果
    .andDo(MockMvcResultHandlers.print())
    // 真正执行请求
    .andReturn();
    }

    }

    阿里有个mock框架【TestableMock】