Go测试 | 青训营笔记

119 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

Go测试 | 青训营笔记

1.1 测试

测试是避免事故的最后一道屏障。

image.png

1.2 测试类型

下述测试类型,覆盖率逐层变大,成本逐层降低

  • 回归测试
  • 集成测试
  • 单元测试

1.3 单元测试

image.png

1.3.1 单元测试-规则
  • 所有测试文件以_test.go结尾
  • func TestXxx(*testing.T)
  • 初始化逻辑放到TestMain
1.3.2 单元测试-覆盖率

代码覆盖率在一定程度上可衡量代码是否经过了足够的测试、能评价项目的测试水准、能评估项目是否达到了高水准测试等级。 单元测试小Tips:

  • 一般覆盖率:50%~60%,较高覆盖率80%+
  • 测试分支相互独立、全面覆盖
  • 测试单元粒度足够小,函数单一职责
1.3.3 单元测试-依赖

外部依赖 => 稳定 & 幂等

  • 幂等:多次测试同一个用例,结果一致
  • 稳定:单元测试相互隔离,任何时间与任何地点都能进行测试

image.png

1.3.4 单元测试-Mock

快速Mock函数,不依赖于本地文件,保证测试的稳定性:

  • 为一个函数打桩——Patch
  • 为一个方法打桩——Unpatch

1.4 基准测试

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力
  • BenchmarkXxx命名代码文件

2.1 项目实战流程

需求设计 → 代码开发 → 测试运行

  1. 需求描述
  2. 需求用例
  3. ER图——Entity Relationship Diagram
  4. 分层结构
    • 数据层:数据Model,外部数据的增删查改
    • 逻辑层:业务Entity,处理核心业务逻辑输出
    • 视图层:视图view,处理和外部的交互逻辑

image.png 5. 组件工具 - Gin 高性能 go web 框架 - Go Mod 6. 实现Repository、Repository-index、Repository-查询 7. 实现Service (参数校验-准备数据-组装实体) 8. 实现Controller - 构建view对象 - 业务错误码 9. 实现Router - 初始化数据索引 - 初始化引擎配置 - 构建路由 - 启动服务 10. 运行 - 运行测试