MockMvc单元测试(Controller)

为偶尔收集问题所写

在写测试之前记得将

MockMvc mockMvc;  加上

MockMvc模板

MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/Controller/controller")  //访问路径
                .contentType(MediaType.APPLICATION_JSON_UTF8)  //设置contentType
                .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andExpect(MockMvcResultMatchers.status().isOk())  //断言返回状态码
                .andExpect(MockMvcResultMatchers.jsonPath("$.code")
                        .value(true))  //断言响应体中body的内容 ->{"code",true}
                .andDo(print()  //输出MvcResult到控制台
                ).andReturn();
        log.debug( mvcResult.getResponse().getContentAsString());
单个或多个参数(.param())
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/Controller/controller")
                .contentType(MediaType.APPLICATION_JSON_UTF8)  //设置contentType
                .param("controller", "controller") //参数赋值
                .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andExpect(MockMvcResultMatchers.status().isOk())  //断言返回状态码
                .andExpect(MockMvcResultMatchers.jsonPath("$.code")
                        .value(true))  //断言响应体中body的内容 ->{"code",true}
                .andDo(print()  //输出MvcResult到控制台
                ).andReturn();
        log.debug( mvcResult.getResponse().getContentAsString());

参数为对象(传入参数,.content封装请求体) 数组类似此写法

UserVO vo = TestObjExp.get(UserVO.class);
        assert vo != null;
        vo.setUnitname("111");//参数赋值
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/Controller/controller")
                .contentType(MediaType.APPLICATION_JSON_UTF8)  //设置contentType
                .content(JSON.toJSONString(vo))  //封装请求体
                .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andExpect(MockMvcResultMatchers.status().isOk())  //断言返回状态码
                .andExpect(MockMvcResultMatchers.jsonPath("$.code")
                        .value(true))  //断言响应体中body的内容 ->{"code",true}
                .andDo(print()  //输出MvcResult到控制台
                ).andReturn();
        log.debug( mvcResult.getResponse().getContentAsString());

List集合(先为对象需要属性赋值,然后封装list对象 ) Map类似此写法

UserVO vo = TestObjExp.get(UserVO.class);
        assert vo != null;
        vo.setUnitname("111");//参数赋值
        ArrayList<UserVO> list = new ArrayList<>();
        list.add(vo);//封装对象
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/Controller/controller")
                .contentType(MediaType.APPLICATION_JSON_UTF8)  //设置contentType
                .content(JSON.toJSONString(vo))  //封装请求体
                .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andExpect(MockMvcResultMatchers.status().isOk())  //断言返回状态码
                .andExpect(MockMvcResultMatchers.jsonPath("$.code")
                        .value(true))  //断言响应体中body的内容 ->{"code",true}
                .andDo(print()  //输出MvcResult到控制台
                ).andReturn();
        log.debug( mvcResult.getResponse().getContentAsString());

文件形式

MockMultipartFile file = new MockMultipartFile("file", "test/Controller.xls"
                , "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" //类型
                , new FileInputStream(new File("src/main/resources/test/Controller.xls")));//输出位置

        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.fileUpload("/Controller/controller")
                .file(file)
                .contentType(MediaType.APPLICATION_JSON_UTF8)  //设置contentType
                .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
        ).andExpect(MockMvcResultMatchers.status().isOk())  //断言返回状态码
                .andExpect(MockMvcResultMatchers.jsonPath("$.code")
                        .value(true))
                .andDo(print())
                .andReturn();//输出MvcResult到控制台
        log.debug(mvcResult.getResponse().getContentAsString());
经验分享 程序员 微信小程序 职场和发展