1. 环境与技术栈准备
在开始自动化之前,先把工具配齐(企业最标准组合):
- 测试框架:JUnit 5
- 模拟依赖:Mockito
- 覆盖率统计:JaCoCo
- 构建工具:Maven / Gradle
- 版本管理:Git
- 持续集成:Jenkins / GitLab CI / GitHub Actions
2. 编写业务代码
开发人员完成业务逻辑,例如:
- Service 层逻辑
- Controller 接口
- Util 工具类
- 复杂算法、校验逻辑
这些代码是被测试对象。
3. 编写单元测试用例
这是自动化的核心步骤,不是手动点,而是用代码写测试。
3.1 构建测试类
- 测试类放在
src/test/java - 类名通常为
XxxServiceTest、XxxUtilTest
3.2 注入 / 模拟依赖
- 对数据库、Redis、第三方接口,不真调用
- 使用 Mockito 模拟返回结果
- 只测试本类逻辑,隔离外部依赖
3.3 设计测试场景
覆盖:
- 正常流程
- 边界值
- 异常情况
- 空参数、非法参数
3.4 编写断言
判断结果是否符合预期:
- 返回值是否正确
- 异常是否抛出
- 方法是否被调用
- 数据库操作次数是否符合
4. 本地执行单元测试(开发自测)
开发在 IDE 中执行:
- 运行单个测试方法
- 运行整个测试类
- 运行所有测试
执行结果:
- ✅ 绿色:通过
- ❌ 红色:失败(逻辑错误 / 断言不通过)
本地必须全部通过才能提交代码。
5. 代码提交到 Git 仓库
开发完成后:
- 提交业务代码
- 提交测试代码
- Push 到远程分支(develop/feature)
6. CI 平台自动触发构建
当代码 Push 后,CI 工具自动拉取代码,开始自动化流程:
6.1 拉取代码
Git pull 最新代码
6.2 编译项目
Maven/Gradle 执行:
plaintext
mvn compile
6.3 自动执行所有单元测试
执行:
plaintext
mvn test
这一步会自动运行所有测试用例,无需人工干预。
6.4 任何一个测试失败 → 构建直接失败
CI 会立即中断流程,并通知开发:
- 测试失败
- 代码不合规
- 禁止进入下一步打包、部署
7. 生成测试覆盖率报告(JaCoCo)
测试通过后自动生成:
- 行覆盖率
- 方法覆盖率
- 类覆盖率
- 分支覆盖率
企业通常设置门槛:
- 行覆盖率 ≥ 70% / 80%
- 核心模块必须 90%+不达标 → 构建失败。
8. 质量门禁检查
CI 配置规则:
- 测试必须 100% 通过
- 覆盖率必须达标
- 禁止低质量代码合并到主干
通过后才能进入下一步。
9. 打包、构建镜像(可选)
plaintext
mvn package -DskipTests=false
(也可以再次运行测试确保稳定)
10. 自动部署 / 发布到测试环境(可选)
通过所有关卡后:
- 自动部署到测试环境
- 供联调、接口测试使用
11. 持续回归(每次提交都自动跑)
以后任何代码修改、合并:
- CI 自动重新跑全部单元测试
- 自动检查覆盖率
- 自动拦截问题代码
实现真正的自动化守护。
整个流程总结(最简版)
- 写业务代码
- 写单元测试代码
- 本地测试通过
- 提交 Git
- CI 自动拉取代码
- CI 自动编译
- CI 自动运行所有测试
- 自动生成覆盖率报告
- 质量门禁校验
- 测试失败 → 阻断上线
- 测试通过 → 自动打包部署
一句话概括
单元测试自动化 = 用代码写测试 + 工具自动跑测试 + CI 自动把关质量,全程不用人管。