目录
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. 注意事项
还是需要强调下,测试嘛,增加了记录就后面跟着删除该记录,养成好习惯。来去无踪,才是好测试。