这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
Go测试 | 青训营笔记
1.1 测试
测试是避免事故的最后一道屏障。
1.2 测试类型
下述测试类型,覆盖率逐层变大,成本逐层降低
- 回归测试
- 集成测试
- 单元测试
1.3 单元测试
1.3.1 单元测试-规则
- 所有测试文件以
_test.go结尾 func TestXxx(*testing.T)- 初始化逻辑放到
TestMain中
1.3.2 单元测试-覆盖率
代码覆盖率在一定程度上可衡量代码是否经过了足够的测试、能评价项目的测试水准、能评估项目是否达到了高水准测试等级。 单元测试小Tips:
- 一般覆盖率:50%~60%,较高覆盖率80%+
- 测试分支相互独立、全面覆盖
- 测试单元粒度足够小,函数单一职责
1.3.3 单元测试-依赖
外部依赖 => 稳定 & 幂等
- 幂等:多次测试同一个用例,结果一致
- 稳定:单元测试相互隔离,任何时间与任何地点都能进行测试
1.3.4 单元测试-Mock
快速Mock函数,不依赖于本地文件,保证测试的稳定性:
- 为一个函数打桩——
Patch - 为一个方法打桩——
Unpatch
1.4 基准测试
- 优化代码,需要对当前代码分析
- 内置的测试框架提供了基准测试的能力
- 以
BenchmarkXxx命名代码文件
2.1 项目实战流程
需求设计 → 代码开发 → 测试运行
- 需求描述
- 需求用例
- ER图——Entity Relationship Diagram
- 分层结构
- 数据层:数据Model,外部数据的增删查改
- 逻辑层:业务Entity,处理核心业务逻辑输出
- 视图层:视图view,处理和外部的交互逻辑
5. 组件工具
- Gin 高性能 go web 框架
- Go Mod
6. 实现Repository、Repository-index、Repository-查询
7. 实现Service (参数校验-准备数据-组装实体)
8. 实现Controller
- 构建view对象
- 业务错误码
9. 实现Router
- 初始化数据索引
- 初始化引擎配置
- 构建路由
- 启动服务
10. 运行
- 运行测试