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
相关产品推荐
相关产品推荐

