单元测试自动化的流程

1. 环境与技术栈准备

在开始自动化之前,先把工具配齐(企业最标准组合):

  • 测试框架:JUnit 5
  • 模拟依赖:Mockito
  • 覆盖率统计:JaCoCo
  • 构建工具:Maven / Gradle
  • 版本管理:Git
  • 持续集成:Jenkins / GitLab CI / GitHub Actions

2. 编写业务代码

开发人员完成业务逻辑,例如:

  • Service 层逻辑
  • Controller 接口
  • Util 工具类
  • 复杂算法、校验逻辑

这些代码是被测试对象


3. 编写单元测试用例

这是自动化的核心步骤,不是手动点,而是用代码写测试。

3.1 构建测试类

  • 测试类放在 src/test/java
  • 类名通常为 XxxServiceTestXxxUtilTest

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 自动重新跑全部单元测试
  • 自动检查覆盖率
  • 自动拦截问题代码

实现真正的自动化守护


整个流程总结(最简版)

  1. 写业务代码
  2. 写单元测试代码
  3. 本地测试通过
  4. 提交 Git
  5. CI 自动拉取代码
  6. CI 自动编译
  7. CI 自动运行所有测试
  8. 自动生成覆盖率报告
  9. 质量门禁校验
  10. 测试失败 → 阻断上线
  11. 测试通过 → 自动打包部署

一句话概括

单元测试自动化 = 用代码写测试 + 工具自动跑测试 + CI 自动把关质量,全程不用人管。

相关推荐
切糕师学AI2 小时前
VictoriaLogs:高性能、低成本、易运维的下一代日志数据库
运维·高性能·日志数据库·victoriallogs·极致日志库
HP-Patience2 小时前
【爬虫脚本自动化录制】playwright codegen使用教程
运维·爬虫·自动化
十六年开源服务商2 小时前
WordPress并发量优化实战:2026运维指南
android·运维
wzl202612132 小时前
企微工具对比:第三方SCRM与自动化工作流集成
运维·自动化·企业微信
一只小bit2 小时前
Docker 实战系列:接入生产场景,快速拉起服务
运维·docker·容器
wwj888wwj2 小时前
Ansible基础(复习3)
linux·运维·服务器·git·ansible
senijusene2 小时前
IMX6ULL Linux 驱动开发:GPIO 子系统 + misc 框架实现按键输入驱动开发
linux·运维·驱动开发
小雨青年2 小时前
GitHub CLI 与脚本自动化
运维·自动化·github
捞的不谈~2 小时前
解决在Ubuntu系统下使用运行Lucid 相机(HTR003S-001)相应实例出现的依赖库缺失的问题
linux·运维·ubuntu