当前位置: 首页 > news >正文

spring-boot-test与 spring-boot-starter-test 区别

spring-boot-test 和 spring-boot-starter-test 是 Spring Boot 测试中两个紧密相关但角色完全不同的组件。

简单来说,它们的核心区别是:

  • spring-boot-starter-test:一个 Starter,它本身不包含功能代码,而是一个依赖项的集合。它的目的是为了方便地引入所有测试需要的库。

  • spring-boot-test:一个 核心模块,它包含了 Spring Boot 提供的实际测试功能代码和注解(如 @SpringBootTest)。

详细对比

为了更清晰地理解,我们用一个表格来对比:

特性spring-boot-starter-test (启动器)spring-boot-test (核心模块)
角色依赖管理工具 (Dependency Aggregator)功能提供者 (Functional Artifact)
主要目的一键导入所有常用的测试依赖,并确保它们的版本相互兼容。提供 Spring Boot 特有的测试基础设施和注解。
包含内容不包含实际功能代码,只包含一个 pom.xml 文件来定义依赖。包含 @SpringBootTestTestRestTemplateMockMvc 等的实现代码
依赖关系依赖于 spring-boot-test 以及其他一大堆测试库(JUnit, Mockito, AssertJ等)。是 spring-boot-starter-test 所依赖的众多组件之一
如何使用在你的项目 pom.xml 或 build.gradle 中声明它通常不需要直接声明,因为它会通过 spring-boot-starter-test 自动传递依赖进来

深入理解:spring-boot-starter-test 包含了什么?

当你声明了 spring-boot-starter-test,你实际上引入了以下一整套测试库:

  1. spring-boot-test: 提供 Spring Boot 测试的核心功能。

  2. spring-test & spring-core: Spring Framework 的测试上下文框架。

  3. JUnit Jupiter (junit-jupiter): 现代 JUnit 5 的 API 和引擎。

  4. Mockito & Mockito JUnit Jupiter: 流行的 Mock 框架及其与 JUnit 5 的集成。

  5. AssertJ: 流式断言库,让断言更优雅、更强大。

  6. JsonPath: 用于解析 JSON 数据的库,在测试中验证 JSON 响应非常方便。

  7. Hamcrest (较老版本中): 另一个匹配器库(现在更推荐 AssertJ)。

应该如何选择?

99.9% 的情况下,你应该在你的 Spring Boot 项目中使用 spring-boot-starter-test

在你的 pom.xml 中这样写:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> <!-- 非常重要,确保这些依赖只用于测试 --><version>3.2.5</version> <!-- 使用你的Spring Boot版本 -->
</dependency>

什么情况下会直接使用 spring-boot-test

几乎不会。除非你的项目有非常特殊的需求,比如:

  • 你只想使用 @SpringBootTest 注解,但希望自己手动管理所有其他测试库的版本。

  • 你在开发一个特殊的插件或工具,它只需要 Spring Boot 的测试基础设施,而不需要完整的测试套件(JUnit, Mockito 等)。

但这种场景极其罕见。直接引入 spring-boot-test 而不引入 spring-boot-starter-test 会导致你缺少 JUnit、Mockito 等核心测试框架,你需要手动把它们一个一个加回来,这完全违背了 Spring Boot Starter 简化配置的初衷。


总结

spring-boot-starter-testspring-boot-test
关系“购物车”“购物车里的一个商品”
你的操作把整个“购物车”(starter-test)加入项目购物车(starter-test)会自动把你想要的“商品”(spring-boot-test)带进来
结论直接使用这个就行不需要关心它,它是自动带来的

记住这个简单的法则:在 Spring Boot 项目中写测试,就引入 spring-boot-starter-test 它会帮你处理好一切。

http://www.dtcms.com/a/354154.html

相关文章:

  • 前端架构设计模式与AI驱动的智能化演进
  • 嵌入式学习日志————USART串口协议
  • 【开发便利】让远程Linux服务器能够访问内网git仓库
  • 目标检测基础
  • [系统架构设计师]论文(二十三)
  • 控制系统仿真之时域分析(二)
  • 计算机组成原理(13) 第二章 - DRAM SRAM SDRAM ROM
  • 通信原理(005)——带宽、宽带、传输速率、流量
  • 农业物联网:科技赋能现代农业新篇章
  • uC/OS-III 队列相关接口
  • Linux 命令浏览文件内容
  • 机器视觉的车载触摸屏玻璃盖板贴合应用
  • 【Bluetooth】【调试工具篇】第九章 实时抓取工具 btsnoop
  • [vcpkg] Windows入门使用介绍
  • 致远OA新闻公告讨论调查信息查询SQL
  • 模拟电路中什么时候适合使用电流传递信号,什么时候合适使用电压传递信号
  • 世界的接口:数学、心智与未知的协作
  • 【前端】jsmpeg 介绍及使用
  • Libvio 访问异常排查指南:从现象到根源的深度剖析
  • 专项智能练习(关系数据库)
  • 风锐统计——让数据像风一样自由!(九)——回归分析
  • FreeRTOS内部机制理解(任务调度机制)(三)
  • opencv学习笔记
  • 基于 Docker Compose 的若依多服务一键部署java项目实践
  • 【深度学习-Day 44】GRU详解:LSTM的优雅继任者?门控循环单元原理与PyTorch实战
  • sparksql的transform如何使用
  • 8.27 网格memo
  • HTTP 头
  • Go 1.25新特性之容器感知功能详解
  • 【C++语法篇】:函数