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注入到入参。
将@RequestBody加上以后,报错400 ,bad request 使用param 和 @RequestParam是不匹配的
终于解决, 这里主要是Springmvc的参数解决的问题 ,之后会详细写一版 Springmvc对于 业务方法入参注入的过程的
先简单说一下:
在这里解析的业务方法的入参
ResponseBody 和 无注解 解析的方式是不同的 所以造成了 不加注解无法获取到content内容的问题
喜欢就收个藏吧
❤❤❤