MockMvc使用案例模拟前端http请求

简介: MockMvc使用案例模拟前端http请求

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兴趣的可以学习下;


相关文章
|
13天前
|
XML Java 数据格式
Servlet 教程 之 Servlet 客户端 HTTP 请求 3
该教程展示了如何在Servlet中处理客户端HTTP请求,特别是获取HTTP头信息。示例代码创建了一个名为`DisplayHeader`的Servlet,它扩展了`HttpServlet`并重写了`doGet`方法。在`doGet`中,使用`HttpServletRequest`的`getHeaderNames()`遍历所有头部,显示其名称和对应值。Servlet在TomcatTest项目下,通过`web.xml`配置映射到`/TomcatTest/DisplayHeader`路径。
29 14
|
23天前
|
API
Arkts http数据请求
Arkts http数据请求
|
13天前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
21 8
|
3天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
4天前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
18 1
|
5天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
6天前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
15 1
|
7天前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
8天前
|
JSON 数据格式 索引
ES 查看索引的属性的http请求
在 Elasticsearch 中,要查看索引的属性,可以通过发送 HTTP 请求来执行以下操作: 1. **获取索引的映射(Mapping)**: 可以使用 `GET` 请求访问 Elasticsearch 的 `_mapping` 端点来获取特定索引的映射信息。 示例请求: ```http GET http://<elasticsearch_host>:<port>/<index_name>/_mapping ``` 2. **获取索引的设置(Settings)**: 可以使用 `GET` 请求访问 Elasticsearch 的 `_setting
|
8天前
|
网络架构 Python
在Flask中,如何定义路由并处理HTTP请求的不同方法(GET、POST等)?
【4月更文挑战第25天】在Flask中,使用`@app.route()`装饰器定义路由,如`/hello`,处理GET请求返回&#39;Hello, World!&#39;。通过添加`methods`参数,可处理不同HTTP方法,如POST请求。单一函数可处理多种方法,通过检查`request.method`区分。动态路由使用 `&lt;variable_name&gt;` 传递URL变量到视图函数。这些基础构成处理HTTP请求的Flask应用。
16 1