创建一个用于测试的Controller:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
@RequestMapping("/")
public @ResponseBody String greeting() {
return "Hello, World";
}
}
需要启动服务器:
MockMvc:
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
public class TestingWebApplicationTest {
@Autowired
private MockMvc mockMvc;
//.perform()执行一个MockMvcRequestBuilders请求。
// 其中.get()表示发送get请求(可以使用get、post、put、delete等);
// .contentType()设置编码格式;.param()请求参数,可以带多个。
//andExpect()添加 MockMvcResultMatchers验证规则,验证执行结果是否正确。
//.andDo()添加 MockMvcResultHandlers结果处理器,这是可以用于打印结果输出。
// .andReturn()结果返回,然后可以进行下一步的处理。
@Test
public void shouldReturnDefaultMessage() throws Exception{
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()).andExpect(content().string(containsString("Hello,World")));
}
}
不需要启动服务器:
建一个用于测试的包testingweb:
package com.pefung.demo.testingweb;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
//通过使用@WebMvcTest(一个注解即可),我们可以将测试范围缩小到仅Web层
@SpringBootTest
@AutoConfigureMockMvc
public class TestingWebApplicationTest {
@Autowired
private MockMvc mockMvc;
//.perform()执行一个MockMvcRequestBuilders请求。
// 其中.get()表示发送get请求(可以使用get、post、put、delete等);
// .contentType()设置编码格式;.param()请求参数,可以带多个。
//andExpect()添加 MockMvcResultMatchers验证规则,验证执行结果是否正确。
//.andDo()添加 MockMvcResultHandlers结果处理器,这是可以用于打印结果输出。
// .andReturn()结果返回,然后可以进行下一步的处理。
@Test
public void shouldReturnDefaultMessage() throws Exception{
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()).andExpect(content().string(containsString("Hello,World")));
}
}
若与期望不符,则:
(多了个空格)
正常则为: