【Spring Boot】使用mockMvc模拟请求以及遇到的问题

目录

1. 设置测试类注解

2. 模拟请求

3. 模拟上传文件及对象

4. 传对象

5. 解析json

6. 注意事项


1. 设置测试类注解

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Slf4j
@AutoConfigureMockMvc
public class MyTest {

}

2. 模拟请求

        String jsonString = mockMvc.perform(MockMvcRequestBuilders.multipart("/test/save")
                .param("code", "hello")
                .param("type", "1")
                .header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE))
                .andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString();
        JSONObject jsonObject = JSONObject.parseObject(jsonString);

使用阿里的fastjson去解析即可。

3. 模拟上传文件及对象

        MockMultipartFile file = new MockMultipartFile("file", "文件名称.xlsx"
                , "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                , new FileInputStream(new File(CommonConstant.FILE_PATH)));

        String jsonString = mockMvc.perform(MockMvcRequestBuilders.multipart("/test/import")
                .file(file)
                .param("myParam", "test")
                .param("importType", "1")
                .header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE)
                .andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString();

        JSONObject jsonObject = JSONObject.parseObject(jsonString);

实际上,传对象,只需要传对象的各个字段即可,SpringMVC会自动将字段封装成一个对象,所以也不需要将对象转为json再传给后端的骚操作(因为我试了传文件同时传对象会没用。。)

4. 传对象

当然,如果只是传个对象,没必要加那么多.param,可以用json啦

        Person person = new Person();
        person.setName("张三");
        //
        String jsonString = mockMvc.perform(MockMvcRequestBuilders
                .post("/test")
                .content(JSONObject.toJSONString(person))
                .header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE))
                .andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString();

        JSONObject jsonObject = JSONObject.parseObject(jsonString);

这样做,也就可以传null过去的,当然直接.param传个null是不会给你过的。 

        String requestBody = "{\"request\":null}";
        String jsonString = mockMvc.perform(MockMvcRequestBuilders
                .post("/test")
                .content(requestBody)
                。。。

5. 解析json

通常对返回的json进行处理,可以用到如下操作:

{
    "code": 200,
    "data": {
        "hasNext": true,
        "list": [
            {
                "productNo": "123456789",
                "id": 1,
                "name": "xxx"
            }
        ],
        "pageNum": 1,
        "pageSize": 10
    },
    "message": "操作成功",
    "timestamp": 1611111111111
}

Integer id = (Integer)((JSONObject)((JSONObject)jsonObject.get("data")).getJSONArray("list").get(0)).get("id");

 主要便是利用get方法将获取到的对象强转为JSONObject,套娃。当然你傻到用字符串正则获取,也没得说。

6. 注意事项

还是需要强调下,测试嘛,增加了记录就后面跟着删除该记录,养成好习惯。来去无踪,才是好测试

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winrh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值