这是我参与「第五届青训营 」笔记创作活动的第2天
本节课重点
Go语言进阶
- Goroutine 协程
- CSP(Communicating Sequential Procecssess)
- 提倡通过通信共享内存而不是通过共享内存而实现通信
- Channel
make(chan int, size int(可选缓冲区大小)) - 并发安全
lock sync.Mutex
lock.lock()
lock.Unlock()
- 线程同步 sync中的WaitGroup进行类似信号量的加减。
var wg sync.WaitGroup
wg.Add(5)
defer wg.Done()
wg.Wait()
依赖管理
Go Modele包管理工具三要素
- 配置文件,描述依赖 go.mod
- 依赖管理基本单元
- 原生库
- 单元依赖
- indirect 非直接依赖
- 主版本v2以上会添加+incompatible后缀
- 中心仓库管理依赖库 Proxy
- 实现稳定可靠的依赖
- 多层寻找
- 本地工具 go get/mod
- go get example.org/pkg
- @update 默认
- @none 删除依赖
- @v1.1.2 tag版本,语义版本
- 23dfdd5 特定的commit
- master 分支的最新commit
- go mod
- init 初始化,创建go.mod文件
- download 下载模块到本地缓存
- tidy 增加需要的依赖,删除不需要的依赖
- go get example.org/pkg
测试
从上到下,覆盖率逐层变大,成本逐层降低
- 回归测试
- 人员试用测试
- 集成测试
- 暴露的接口进行测试
- 单元测试
- 对模块测试验证
- 输入->测试单元->输出->与期望校对
- 保证质量 提升效率
- 规则
- 所有测试文件以_test.go结尾
- func TestXxx(*testing.T)
- 初始化逻辑放到TestMain中
- 指令
go test [flags] [packages] - 代码覆盖率--->越高越好
- 一般覆盖率:50%~60%
- 基准测试
go test -bench=
本节课难点
mock测试
- mock测试是什么?
- mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
- 实例
实例
-
需求设计
- 需求用例
- ER图
- 分层结构
-
代码开发
- 数据层
- 外部数据的增删改查
- file
- model
- respository
- 逻辑层
- 处理核心业务逻辑输出
- entity
- Service
- 视图层
- 处理和外部交互逻辑
- controllor
- view
- client
- 数据层
-
测试运行
我遇到的问题及其解决方法
- 在使用时单元测试时覆盖率并不高,怎么提升?
- 使用多个例子进行测试增加覆盖率。