美文网首页
springboot之MockMvc

springboot之MockMvc

作者: sunpy | 来源:发表于2023-01-26 22:19 被阅读0次

    使用场景

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

    用法

      1. 测试的接口:
    @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()); // 设置响应的状态码
        }
    }
    
      1. 测试的接口:
    @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));
        }
    }
    
      1. 测试的接口:
    @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字符串。

    相关文章

      网友评论

          本文标题:springboot之MockMvc

          本文链接:https://www.haomeiwen.com/subject/eayshdtx.html