Springboot MockMvc 单元测试 参数传值问题

Springboot MockMvc 单元测试 参数传值问题

在使用MockMvc单元测试对接口进行测试时,可能会遇到你在测试中传入的值,无法被映射到对应的属性的问题,本节就讨论一下如何解决这样的问题

其他关于接口测试的内容可以参考之前的文章:
Springboot Restful风格 接口单元测试_Mock

get请求

get请求参数很简单,只需要加入到param参数中,或者使用get请求将参数“?param=xxx” 拼接到url后面,

  MvcResult mvcResult = mockMvc.perform(
                MockMvcRequestBuilders.get("/api/v1/roles/removeRoles")
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                        .param("id" , "1"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();

Post 请求

 		RoleRequest roleRequest = new RoleRequest();
        roleRequest.setId(1111l);
        JSONObject jsonObject = new JSONObject(roleRequest);
        String strJson = jsonObject.toString();

        MvcResult mvcResult = mockMvc.perform(
                MockMvcRequestBuilders.post("/api/v1/roles/allocate")
                        .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(strJson)
                )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();

post请求是通过content 将参数传递的。

但是在Controller层 使用拿到的是id= null ,始终无法注入到roleRequest

public ResponseEntity xxxController( RoleRequest roleRequest){

}

发现入参并没有指定注入的方式,在入参上加上 @RequestBody注解后。

问题解决过程

当时没发现的情况下,如何测试的? 既然content是无法注入到的,然后就想到是不是走了其他的注入方式,遂使用param去测试,果然成功将param注入到入参。
Springboot  MockMvc 单元测试 参数传值问题
将@RequestBody加上以后,报错400 ,bad request 使用param 和 @RequestParam是不匹配的
Springboot  MockMvc 单元测试 参数传值问题
终于解决, 这里主要是Springmvc的参数解决的问题 ,之后会详细写一版 Springmvc对于 业务方法入参注入的过程的

先简单说一下:
Springboot  MockMvc 单元测试 参数传值问题在这里解析的业务方法的入参

ResponseBody 和 无注解 解析的方式是不同的 所以造成了 不加注解无法获取到content内容的问题


喜欢就收个藏吧

❤❤❤

上一篇:mockMvc测试


下一篇:MockMvc模拟的get请求不支持content