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


相关文章
|
2月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
469 130
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
上下文选择器(迭代选择器):基于祖先或同胞元素选择一个元素 ID和类选择器:基于id#和class的属性值进行选择元素。 属性选择器:基于属性的有无和特征进行选择。 ①上下文选择器: 上下文选择器的语法格式:标签1 标签2{属性:值;} //注意:组合选择器和上下文选择器的区别,组合选择器以逗号隔开, 上下文选择器以空格隔开 ②特殊的上下文选择器 子选择器> : 语法格式:标签1>标签2 解释说明:标签1和标签2
213 0
|
3月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
514 2
|
3月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
3月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
4月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
227 0
|
4月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
390 0
|
缓存 前端开发 JavaScript
前端性能优化-减少HTTP请求数
前端性能优化-减少HTTP请求数
478 0
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
196 18
|
6月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
187 19

热门文章

最新文章

  • 1
    HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
  • 2
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 3
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 4
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距