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注入到入参。
在这里插入图片描述
将@RequestBody加上以后,报错400 ,bad request 使用param 和 @RequestParam是不匹配的
在这里插入图片描述
终于解决, 这里主要是Springmvc的参数解决的问题 ,之后会详细写一版 Springmvc对于 业务方法入参注入的过程的

先简单说一下:
在这里插入图片描述在这里解析的业务方法的入参

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


喜欢就收个藏吧

❤❤❤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值