Skip to content
Maven 企业构建与私服实践 · 第 2 篇 / 共 3 篇
领域工程与工具
专题Maven 专题
当前序列Maven 企业构建与私服实践
阅读位置第 2 篇 / 共 3 篇当前专题第 2 个序列 / 共 2 个序列

Surefire 和 Failsafe 怎么配合测试阶段

先说结论

  • Surefire 更适合跑单元测试
  • Failsafe 更适合跑集成测试或更慢、更重的测试
  • 两者最大的差别不是插件名字,而是它们挂在 Maven 生命周期里的阶段不同

一、为什么 Maven 要拆成两个插件

因为测试不是只有一种。

1. 单元测试

更轻、更快,通常只验证本地逻辑,不依赖完整外部环境。

2. 集成测试

更重,可能依赖:

  • 数据库
  • Redis
  • MQ
  • 外部服务
  • 容器环境

如果把这两类测试全混在一个阶段跑,构建体验和失败语义都会很乱。

二、两者最关键的区别

Surefire

通常绑定在:

  • test

也就是你执行常规测试时最先跑的那一层。

Failsafe

通常和:

  • integration-test
  • verify

这些阶段更相关。

它的价值在于:
先让集成测试跑完,再在 verify 阶段统一判断结果和收口。

三、什么时候更适合分开

更适合拆分的场景通常是:

  • 单元测试很多,想保持反馈快
  • 集成测试依赖环境,跑一次比较重
  • CI 里想分层执行测试
  • 本地开发不想每次都把重测试一起跑

这种时候,把单测给 Surefire,把集成测试给 Failsafe,会更清楚。

四、最容易踩的坑

1. 测试命名和阶段没统一

结果就是:

  • 本该是集成测试的类被单测阶段跑了
  • 或者重测试根本没被执行

2. 只配了插件,没想好 CI 策略

比如本地只跑单测,CI 才跑集成测试,这种规则需要明确,不然团队认知会乱。

3. 集成测试失败了却没有在合适阶段收口

这样很容易导致构建结果看起来不一致,排查起来也更别扭。

总结

Surefire 和 Failsafe 的核心不是“哪个更高级”,而是分别服务不同测试层次。单元测试要快、集成测试要稳、CI 阶段要清晰,只要按这个思路拆开,构建链路通常会顺很多。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读pluginManagement、dependencyManagement 和 BOM 怎么分工适合把私服、测试阶段和 BOM 管理放到一起看。Maven 专题 · Maven 企业构建与私服实践同一序列 · 回看前文会更完整Nexus 私服和企业依赖治理怎么做适合把私服、测试阶段和 BOM 管理放到一起看。Maven 专题 · Maven 企业构建与私服实践同专题其他序列 · Maven 生命周期与依赖治理多模块项目怎么组织更稳适合把生命周期、依赖范围和多模块实践放在一起看。Maven 专题 · Maven 生命周期与依赖治理同专题其他序列 · Maven 生命周期与依赖治理Maven 生命周期和构建阶段怎么理解适合把生命周期、依赖范围和多模块实践放在一起看。Maven 专题 · Maven 生命周期与依赖治理跨专题关联 · 同场景:工程协作把 AI 接进开发流程适合把需求拆解、权限边界、成本控制、审查与团队落地方式组织成一套可长期维护的流程。AI 与智能体专题 · AI 协作流程与治理跨专题关联 · 同场景:工程协作本地旧项目怎么推到远程仓库适合把本地项目入仓、Node 版本管理和日常开发环境打底放在一起看。工程协作与环境治理专题 · 开发环境与仓库协作
继续阅读Maven 企业构建与私服实践当前序列第 2 篇 / 共 3 篇当前专题第 2 个序列 / 共 2 个序列
往前看
上一篇Nexus 私服和企业依赖治理怎么做回到当前序列上一章上一序列Maven 生命周期与依赖治理从第 1 篇开始:Maven 生命周期和构建阶段怎么理解
往后看
下一篇pluginManagement、dependencyManagement 和 BOM 怎么分工继续当前序列下一章下一序列AI 接入与工程化实践从第 1 篇开始:RAG 和微调到底怎么选

把零散经验整理成可查、可复用、可持续更新的企业级知识门户