You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

spring-boot-test与spring-boot-starter-test的区别及依赖关系咨询

Spring Boot测试依赖解惑:spring-boot-test vs spring-boot-starter-test

嘿,我完全懂你看到这俩依赖时的迷茫!刚接触Spring Boot测试的时候我也对着这俩玩意儿愣了半天,这就给你把它们的区别讲得明明白白,顺便拆解下你代码里的配置逻辑。

先搞清楚spring-boot-test是什么

  • 它是Spring Boot提供的核心测试基础库,里面封装了和Spring Boot应用上下文测试相关的核心类与逻辑,比如SpringBootTestContextBootstrapper(用来启动测试上下文的核心类)、测试注解的辅助实现等等。
  • 但它只是个“基础组件”,不会自动帮你引入其他常用的测试框架(比如JUnit、Mockito这些),单独用它的话,你还得自己手动加一堆测试依赖,非常麻烦。

再看spring-boot-starter-test:测试依赖的“全家桶”

这才是Spring Boot为我们准备的「一站式测试解决方案」,完全贴合Spring Boot的starter设计思想:

  • 它已经包含了spring-boot-test(划重点!你代码里同时引入两个其实是冗余的,完全可以删掉单独的spring-boot-test依赖)
  • 它一次性帮你引入了几乎所有Spring Boot项目测试需要的依赖集合,比如:
    • JUnit 5(测试框架核心)
    • AssertJ(更友好的断言库)
    • Mockito(模拟对象框架)
    • Spring Test(Spring官方的测试支持)
    • JSONassert、JsonPath(JSON数据测试工具)
  • 简单说,只要引入这个starter,你不用再一个个去搜各种测试依赖的版本、处理依赖冲突,Spring Boot已经帮你搞定了所有版本协调工作。

聊聊你代码里的配置逻辑

你代码里给spring-boot-starter-test加了两个排除项:

  • 排除org.junit.vintage:junit-vintage-engine:这是JUnit 5用来兼容JUnit 4的引擎,如果你项目已经全面切换到JUnit 5,排除它可以避免不必要的依赖,也能防止测试运行时的版本冲突。
  • 排除junit:junit:这就是旧版的JUnit 4核心依赖,排除它也是为了确保项目只用JUnit 5来运行测试。

最后给个总结建议

  • 99%的Spring Boot测试场景,你只需要引入spring-boot-starter-test就足够了,它包含了spring-boot-test的所有功能,还附带了全套测试工具。
  • 只有当你极端场景下,只需要Spring Boot测试的核心基础逻辑,不需要其他测试框架时,才考虑单独引入spring-boot-test——但这种情况真的非常少见。

内容的提问来源于stack exchange,提问作者Phate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:12:31