源码展示:
原来的controller类:
java
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/web")
@Slf4j
@Service
public class WebController {
@RequestMapping("/get")
public String get(){
log.info("get");
return "get";
}
@PostMapping("/post")
public String post(@RequestBody Student student){
log.info("post method student={}",student );
return "post success";
}
@PostMapping("/postHead")
public String postHead(@RequestHeader("token") String token){
log.info("token : "+token);
return "post head token:"+token;
}
}
自己定义的一个测试对象student:
java
import lombok.Data;
@Data
public class Student {
private String name;
private int age;
}
测试代码:
java
package org.qjg.controller;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSON;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.WebApplicationContext;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
@Slf4j
@SpringBootTest
class WebControllerTest {
private MockMvc mockMvc;
private HttpHeaders headers;
@Resource
private WebApplicationContext webApplicationContext;
private String baseUrl = "/web";
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();//或者使用普通的map也是可以的
map.add("token", "qjg-token");
headers = new HttpHeaders();
headers.putAll(map);
;
}
@SneakyThrows
@Test
void get() {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(baseUrl + "/get")
.headers(headers)
.contentType(MediaType.APPLICATION_JSON)
).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
String contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
log.info("contentAsString: " + contentAsString);
}
@SneakyThrows
@Test
void post() {
Student student = new Student();
student.setAge(18);
student.setName("张三");
MvcResult mvcResult = mockMvc.perform(
MockMvcRequestBuilders.post(baseUrl + "/post")
.contentType(MediaType.APPLICATION_JSON)
.content(JSON.toJSONString(student))
.headers(headers)
).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
String contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
log.info("contentAsString: " + contentAsString);
}
@SneakyThrows
@Test
void postHead() {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post(baseUrl + "/postHead")
.contentType(MediaType.APPLICATION_JSON).content("")
.headers(headers)
).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
String contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
Assert.isTrue("post head token:qjg-token".equals(contentAsString));
}
}