Spring Boot 3.4 中 MockMvcTester 的新特性解析

server/2025/2/12 10:52:47/

d2b5ca33bd20250125113843

引言

在 Spring Boot 3.4 版本中,引入了一个全新的 MockMvcTester 类,使 MockMvc 测试可以直接支持 AssertJ 断言。本文将深入探讨这一新特性,分析它如何优化 MockMvc 测试并提升测试的可读性。

Spring MVC 示例

为了演示 MockMvcTester 的实际应用,我们首先创建一个基础的 Spring MVC 控制器,提供一个 /hello 端点。

通常情况下,Spring 开发者在测试中选择 AssertJ 来编写断言,但在 MockMvc 测试中,我们必须使用 Hamcrest 进行匹配。

例如:

java">mockMvc.perform(get("/hello")).andExpect(status().isOk()).andExpect(content().string(containsString("Hello")));

然而,在 MockMvc 断言中使用 AssertJ 可能会更直观和流畅。

MockMvcTester 是如何工作的?

从 Spring Boot 3.4 开始,MockMvcTester 被自动配置并提供了流畅的 API,使我们能够直接使用 AssertJ 进行断言。

MockMvcTester 构建在 MockMvc 之上,允许我们编写更简洁的测试代码,例如:

java">mockMvcTester.get("/hello").execute().assertThat(response -> response.status().isOk().content().string().contains("Hello"));

这样,我们可以将 MockMvc 结果直接包装在标准的 assertThat() 方法中,提升测试的可读性和可维护性。

MockMvcTester 相较于 MockMvc 的优势

MockMvcTester 相较于 MockMvc 主要有以下几个优势:

  • 简化 API 调用:无需为 AssertJ 断言使用静态导入,所有请求和断言均可通过流畅 API 构建。
  • 异常处理优化:未解决的异常会被一致处理,测试代码不再需要显式抛出或捕获 Exception
  • 异步处理更友好:默认情况下,MockMvcTester 断言的结果无论是同步还是异步,都会完整返回,无需额外处理。
  • 兼容原始 MockMvc API:可以在现有 MockMvc API 基础上集成 MockMvcTester,增强测试能力。

结论

Spring Boot 3.4 对 MockMvc 测试的增强,使得偏好 AssertJ 的开发者能够更统一地编写测试代码。通过 AssertJ 提供的流畅断言,控制器测试的可读性和可维护性均得到了显著提升。如果你正在使用 Spring Boot 进行测试,不妨尝试 MockMvcTester,让测试代码更简洁、更优雅!


http://www.ppmy.cn/server/167037.html

相关文章

【含文档+PPT+源码】基于python爬虫的豆瓣电影、音乐、图书数据分析系统

项目介绍 本课程演示的是一款基于python爬虫的豆瓣电影、音乐、图书数据分析系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

将DeepSeek接入Excel实现交互式对话

引言 将DeepSeek接入Excel,为你带来前所未有的交互体验!“哪里不懂,选中哪里”,然后直接在侧边栏对话框向DeepSeek发问,非常地方便! 案例演示 设置接入方式 既可以通过本地部署的DeepSeek接入Excel&#…

Flink-序列化

一、概述 几乎每个Flink作业都必须在其运算符之间交换数据,由于这些记录不仅可以发送到同一JVM中的另一个实例,还可以发送到单独的进程,因此需要先将记录序列化为字节。类似地,Flink的堆外状态后端基于本地嵌入式RocksDB实例&…

Spring Boot接入Deep Seek的API

1,首先进入deepseek的官网:DeepSeek | 深度求索,单击右上角的API开放平台。 2,单击API keys,创建一个API,创建完成务必复制!!不然关掉之后会看不看api key!!&…

使用deepseek快速创作ppt

目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型,其推理能力炸裂,但是DeepSeek官方没有提供生成PPT功能,如果让DeepSeek做PPT呢? 有个途径:在DeepSeek让其深度思考做出PPT脚本&#xf…

Kubernetes 中特权模式(Privileged Mode)容器

目录标题 Kubernetes 中的特权模式容器笔记特权模式定义特权模式的配置特权模式的影响如何检查特权模式查看 Pod 详细信息查找 Security Context 部分 特权模式的使用建议总结 容器里面ps -ef和宿主机是一样的可能的原因解决方法 Kubernetes 中的特权模式容器笔记 特权模式定义…

2024美团春招硬件开发笔试真题及答案解析

目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…

2025年日祭

本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 以下是题目格式: [题目OJ 题号] [来源(选填)] 名称 …… 题号 - 名称 题目:……