🧪 Go 测试 · 实战
📘 30 章
单元 · 集成 · 端到端
01
Go 测试基础
框架介绍
testing 核心
Test 签名
表格驱动入门
02
编写第一个单元测试
被测函数设计
_test.go 文件
go test 运行
PASS / FAIL
03
断言与错误处理
assert 局限
testify/assert
自定义错误
Errorf vs Fatalf
04
表格驱动测试
表格驱动概念
测试用例结构体
遍历执行
t.Run 子测试
05
测试覆盖率
go test -cover
覆盖率百分比
coverprofile
go tool cover
06
基准测试 (Benchmark)
Benchmark 签名
b.N 循环
-bench=.
性能比较
07
示例测试 (Example)
Example 命名
验证输出
文档+测试
godoc 展示
08
Mock 与 Stub 概念
测试替身分类
Stub vs Mock
何时使用 Mock
09
Go 接口与依赖注入
面向接口
接口解耦
构造函数注入
手动 Mock
10
使用 gomock 生成 Mock
安装 gomock
mockgen 生成
EXPECT 期望
调用与验证
11
使用 testify/mock
testify/mock 介绍
Mock 结构体
实现接口
断言调用
12
HTTP 服务测试 (httptest)
NewServer
NewRecorder
测试 Handler
13
HTTP 客户端测试
Mock HTTP 客户端
RoundTripper
外部 API 测试
超时重试
14
数据库测试策略
内存 SQLite
事务回滚
sqlmock
数据污染避免
15
使用 sqlmock 数据库测试
安装 sqlmock
模拟查询
匹配 SQL
测试 DAO
16
文件系统与 IO 测试
os.CreateTemp
读写逻辑测试
文件不存在
清理数据
17
并发代码测试
测试 Goroutine
sync.WaitGroup
竞态检测 -race
channel 模式
18
测试超时与上下文
context.WithTimeout
超时处理逻辑
避免挂起
全局超时
19
TestMain 与 Setup/Teardown
TestMain 函数
m.Run()
全局 Setup
资源清理
20
测试套件 (Test Suite)
testify/suite
Suite 结构体
SetupTest
TearDownTest
21
Golden File 测试
Golden File 概念
生成预期输出
flag 更新
复杂输出验证
22
Fuzz 测试 (模糊测试)
Go 1.18 Fuzz
Fuzz 签名
种子语料库
边界漏洞
23
测试私有函数与未导出类型
包内 vs 外部测试
包声明技巧
访问私有成员
反射局限
24
持续集成中的测试
GitHub Actions
单元+集成测试
覆盖率报告
结果通知
25
测试代码质量与重构
可读性
避免重复
测试辅助函数
DRY 原则
26
集成测试环境搭建
Docker Compose
数据库/消息队列
服务就绪策略
环境清理
27
编写端到端 (E2E) 测试
E2E 定位
真实 HTTP 客户端
完整业务流程
维护成本
28
测试日志与调试
t.Log / t.Logf
条件性详细输出
-v 标志
调试失败测试
29
测试性能优化
t.Parallel
缓存机制
减少编译时间
-run 标志
30
综合实战:RESTful API 项目
项目结构设计
Handler/Service/Repo 测试
Mock 外部依赖
集成测试 + CI/CD