单元测试自动化的流程

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 自动把关质量,全程不用人管。

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质13 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务