springboot之MockMvc

2023-01-26  本文已影响0人  sunpy

使用场景

用于对springboot应用实现集成模块测试。不依赖于web容器。

用法

@Slf4j
@RequestMapping("/test")
@RestController
public class TestController {

    @GetMapping("/doService")
    public void doService() {
        log.info("---------- doService");
    }
}

测试用例:

@SpringBootTest
@AutoConfigureMockMvc
public class SpringTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void doTest() throws Exception {
        mockMvc.perform(
                MockMvcRequestBuilders.get("/test/doService").accept(MediaType.APPLICATION_JSON)  // 设置响应的文本类型
        ).andExpect(MockMvcResultMatchers.status().isOk()); // 设置响应的状态码
    }
}
@PostMapping("/doService2")
public ResultModel<UserVO> doService2(@RequestBody UserVO userVO) {
    log.info("---------- doService2");
    log.info("传入的参数:{}", userVO);

    ResultModel<UserVO> resultModel = new ResultModel<>();
    resultModel.setRes(userVO);
    return resultModel;
}

测试用例:

@SpringBootTest
@AutoConfigureMockMvc
public class SpringTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void doTest() throws Exception {
        UserVO userVO = new UserVO();
        userVO.setUsername("zhangsan");
        userVO.setAge(23);
        String userVOJson = JSON.toJSONString(userVO);
        mockMvc.perform(
                MockMvcRequestBuilders.post("/test/doService2")
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(userVOJson)
        ).andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.res.username").value("zhangsan"))
                .andExpect(MockMvcResultMatchers.jsonPath("$.res.age").value(23));
    }
}
@PostMapping("/doService3/{age}")
    public String doService3(@RequestParam String username, @PathVariable Integer age) {
        log.info("---------- doService3");
        log.info("传入的参数:username = " + username);
        log.info("传入的参数:age = " + age);
        return "execute success";
    }

测试用例:

@Test
public void doTest() throws Exception {
    mockMvc.perform(
                    MockMvcRequestBuilders.post("/test/doService3/{age}", 23)
                            .accept(MediaType.APPLICATION_JSON)
                            .contentType(MediaType.APPLICATION_JSON)
                            .param("username", "zhangsan")
            ).andExpect(MockMvcResultMatchers.status().isOk())
            .andExpect(MockMvcResultMatchers.content().string("execute success"));
}

解释

accept方法:接收http协议中的媒体类型
contentType方法:接收http协议中响应类型
content方法:接收请求或者响应中的String字符串类型,如果我们使用@RequestBody传入一个对象,需要使用转为json字符串。

上一篇下一篇

猜你喜欢

热点阅读