创建一个用于测试的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")));
}
}
若与期望不符,则:
(多了个空格)

正常则为:

博客介绍了Spring Java项目中创建用于测试的Controller的相关内容,提到了启动服务器和不启动服务器两种测试情况。重点介绍了MockMvc,它能模拟Http请求,转换到Controller调用,测试速度快、不依赖网络,还提供统一方便的验证工具。
932

被折叠的 条评论
为什么被折叠?



