🧪 Go 测试 · 实战

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