MockMvc是Spring MVC中提供的用于模拟HTTP请求和测试控制器的工具类。通过使用MockMvc,可以方便地对控制器的处理方法进行测试,验证其是否按照预期进行处理并返回正确的响应结果。
在使用MockMvc前,需要先通过MockMvcBuilders类的静态方法创建MockMvc对象。创建MockMvc对象时,可以指定要测试的控制器实例,也可以使用StandaloneMockMvcBuilder类的各种方法配置MockMvc对象。配置完成后,就可以使用MockMvc对象来发送HTTP请求和验证响应结果了。
MockMvc支持各种HTTP请求方式,例如GET、POST、PUT、DELETE等,可以使用MockMvcRequestBuilders类的静态方法创建请求对象。创建请求对象时,可以指定请求的URL、请求参数、请求头部等信息。创建完成后,可以使用MockMvc对象的perform方法发送请求,并获取响应结果。
MockMvc对象的perform方法返回一个ResultActions对象,可以使用该对象的各种方法对响应结果进行验证。例如,可以使用status方法验证响应状态码是否正确,使用content方法验证响应内容是否正确,使用jsonPath方法对JSON格式的响应结果进行解析和匹配等。
除了对控制器的处理方法进行测试外,MockMvc还可以用于测试各种过滤器、拦截器等Spring MVC中的组件。在测试过程中,可以使用MockMvc提供的各种方法对请求和响应进行模拟和验证,从而保证系统的正确性和稳定性。
总的来说,MockMvc是Spring MVC中一个非常重要和实用的测试工具,可以帮助开发者快速进行控制器的单元测试和集成测试。在使用MockMvc时,需要熟悉其各种方法和API,以便能够充分利用其功能和特性,提高测试效率和测试质量。
实体类:
package com.roncoo.education.bean;
import java.util.Date;
/**
* 实体类
*
* @author wujing
*/
public class User {
private int id;
private String name;
private String date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
控制台
package com.roncoo.education.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.roncoo.education.bean.User;
/**
* spring-boot-demo-2-1
*
* @author wujing
*/
@RestController
@RequestMapping(value = "/index")
public class IndexController {
@RequestMapping
public String index() {
return "hello world";
}
// @RequestParam 简单类型的绑定,可以出来get和post
@RequestMapping(value = "/get")
public HashMap<String, Object> get(@RequestParam String name) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("title", "hello world");
map.put("name", name);
System.out.println("map的值"+map);
return map;
}
// @PathVariable 获得请求url中的动态参数
@RequestMapping(value = "/get/{id}/{name}")
public User getUser(@PathVariable int id, @PathVariable String name) {
User user = new User();
user.setId(id);
user.setName(name);
String le = "aabb";
user.setDate(le);
System.out.println("user的值"+user.getDate());
return user;
}
}
测试类:
package com.roncoo.education;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.roncoo.education.controller.IndexController;
import java.text.SimpleDateFormat;
import java.util.Date;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemo21ApplicationTests {
//因此可以通过MockMVC来模拟HTTP请求。基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,
// 即从URL请求到控制器处理,再到视图渲染都可以测试。
private MockMvc mvc;
@Before
public void setup() {
//这段代码创建了一个MockMvc实例,用于对IndexController进行单元测试。
// MockMvc是Spring MVC中的一个测试工具,它可以模拟HTTP请求并对返回结果进行断言和验证。
// 使用standaloneSetup方法,可以将需要测试的控制器添加到MockMvc中进行测试,而不需要启动完整的Web应用程序。
// 这种单元测试的方式可以快速验证控制器的行为和返回结果,提高测试效率。
this.mvc = MockMvcBuilders.standaloneSetup(new IndexController()).build();
}
//这是一个使用RestAssured库创建HTTP请求的示例代码。它将创建一个GET请求,请求的路径是“/index”。这个请求可以被发送到一个Web服务器,以获取位于“/index”路径的资源。
/**
* 这段代码是一个 Java Spring 框架中的单元测试,用于测试一个控制器(Controller)的一个方法。具体解释如下:
* <p>
* mvc 是一个 MockMvc 类的实例化对象,用于模拟 HTTP 请求和响应。
* perform(request) 方法执行了一个 HTTP 请求,并返回一个 ResultActions 对象,用于执行后续的断言。
* andExpect(status().isOk()) 方法是一个 ResultActions 对象的方法,用于断言 HTTP 响应的状态码是否为 200(即 OK)。
* andExpect(content().string("hello world")) 方法也是一个 ResultActions 对象的方法,用于断言 HTTP 响应的内容是否为 "hello world"。
* 综上,这段代码的作用是测试一个控制器方法,检查该方法返回的 HTTP 响应是否为状态码为 200,内容为 "hello world"。
*
* @throws Exception
*/
@Test
public void contextLoads() throws Exception {
RequestBuilder request = get("/index");
mvc.perform(request).andExpect(status().isOk()).andExpect(content().string("hello world"));
request = get("/index/get").param("name", "无境");
mvc.perform(request).andExpect(status().isOk()).andExpect(content().string("{\"name\":\"无境\",\"title\":\"hello world\"}"));
String le="aabb";
RequestBuilder request1 = get("/index/get/1/age");
mvc.perform(request1).andExpect(status().isOk()).andExpect(content().string("{\"id\":1,\"name\":\"age\",\"date\":\"aabb\"}"));
}
}
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.roncoo.education</groupId>
<artifactId>spring-boot-demo-02-1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-02-1</name>
<description>RESTfull API简单项目的快速搭建</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
偶尔学习中遇到的;现在有了postman等工具不一定能用到把;有i兴趣的可以学习下;