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


相关文章
|
20天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
35 3
|
9天前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
|
8天前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
15天前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
17天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
17天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
16天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
20天前
|
安全 API 数据安全/隐私保护
常见的HTTP请求方法
【10月更文挑战第25天】这些HTTP请求方法共同构成了客户端与服务器之间交互的基础,使得客户端能够根据不同的需求对服务器资源进行各种操作。在实际应用中,开发者需要根据具体的业务场景和资源的性质选择合适的请求方法来实现客户端与服务器之间的有效通信。
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
133 2
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
43 0

热门文章

最新文章

下一篇
无影云桌面