MockMVC-基于RESTful风格的接口测试

    xiaoxiao2025-07-11  20

    MockMVC-基于RESTful风格的接口测试@前后端分离

    MockMVC的使用

    [2019/5/16 22:31] 前言:简单的编写几个测试用例,可以满足平时的测试要求

    1、首先,编写一个Controller,用于测试

    @RestController @RequestMapping("/user") public class UserController { @GetMapping public List<User> query(@RequestParam String username){ List<User> list = new ArrayList<>(); list.add(new User()); list.add(new User()); list.add(new User()); return list; }

    2、Controller中用到的User实体

    public class User { private String Id; private String username; private String password; private Date birthday; ...SetterandGetter; }

    3、新建一个测试类

    @RunWith(SpringRunner.class) @SpringBootTest public class UserControllerTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; /* * 构造mvc环境,每次方法测试前执行 * */ @Before public void setup(){ mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } ...TestMethods; }

    注意:这里的测试类的写法一般都比较固定:springboot的测试环境;引入MockMVC;在方法执行前构造MVC环境;使用测试方法; 4、编写测试方法[上面类中的省略号]

    @Test public void whenSelectSuccess() throws Exception{ mockMvc.perform(MockMvcRequestBuilders.get("/user") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(MockMvcResultMatchers.status().isOk()) // 对返回结果集的长度进行判断:为3时通过测试 .andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3)) }

    相关解释: MockMvcRequestBuilders:进行模拟Http请求对象【封装请求对象:.get/post/put…】 contentType:请求中携带的请求头,因为是分离开发模式,使用的是JSON数据 andExpect:期望,可以传各种期望参数【返回的状态码,以及对结果集的判断】 $.length:美元符号是返回的结果集 5、打印结果集 主要介绍MockMVC,相应的接口就不贴了

    @Test public void whenGetInfoSuccess()throws Exception{ String result = mockMvc.perform(MockMvcRequestBuilders.get("/user/1") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.username").value("tom")) .andReturn().getResponse().getContentAsString(); System.out.println(result); }

    andReturn().getResponse().getContentAsString()这句话返回response相应体中的内容,并转化成字符串。 6、post请求提交数据

    @Test public void whenPostSuccess() throws Exception{ Date date = new Date(); String content = "{\"username\":\"ff\",\"password\":null,\"birthday\":"+date.getTime()+"}"; String result = mockMvc.perform(MockMvcRequestBuilders.post("/user") .content(content) .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1")) .andReturn().getResponse().getContentAsString(); System.out.println(result); }

    使用content携带内容信息 7、上传文件请求

    @Test public void whenUploadSuccess() throws Exception{ String result = mockMvc.perform(MockMvcRequestBuilders.fileUpload("/file") .file(new MockMultipartFile("file","test.txt","multipart/form-data","hello upload".getBytes("UTF-8")))) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println(result); }

    使用file携带文件信息 注意:MockMultipartFile的第一个参数是文件名,要与接收的参数一致。 8、当然,重复使用的类是可以在编译器中指定的。。

    入门级的哦,后续更新…

    最新回复(0)