Go依赖管理和测试|青训营笔记

66 阅读2分钟

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

复习整理了一下之前课程中的依赖管理和测试的一些内容

依赖管理Go Module

go.mod配置文件。第一行是依赖管理基本单元,第二行是原生库(Go版本),第三部分是单元依赖(具体的管理)

版本表达1:V1.3.0:MAJOR大版本(互相不兼容).MINOR(新增功能,MAJOR内兼容).PATCH(bug修复)

版本表达2:vx.x.x-yyyymmddhhmmss-hash码前缀

go.mod文件中:

indirect//间接依赖,即A->B->C中的A->C

incompatible:Go语言推荐在V1以上时要写明major号(projact/是v1,projact/v2/是v2),否则就要加上incompatible

编译选择时,选择兼容的(即major大版本)的最新版本

依赖分发Proxy

开发者直接依赖代码管理平台,依赖的代码不稳定,容易被修改

Go Proxy会缓存源代码,且即使源码删除也会保存

GOPROXY="a.cn",https://b.cn,dirct…

 

go get ...@update获取最新

go get ...@none删除依赖

go get ...@v1.1.1更新到指定版本

go get ...@22dfdfs3更新到指定commit

go get ...@master分支的最新commit

 

go mod init初始化创建go.mod文件

go mod download 下载模块

go mod tity增加新的依赖,删除冗余依赖

测试

回归测试(用着试试)->集成测试(基于接口自动化测试)->单元测试(开发对模块的验证)

覆盖率逐层变大,成本逐层降低

单元测试

测试文件命名:开发文件_test.go test输入channel.go channel_test.go运行(一定要和测试文件一起编译运行)

测试函数

func TestXxx(t *testing.T) {

//准备工作

code := t.Run()

os.Exit(code)

}

(依赖没有的话go get xxx)

代码覆盖率:检查全面不全面

go test hello_test.go hello.go --cover 计算代码覆盖率

一般代码覆盖率50-60,80+较高(所以函数小好测试)

 

幂等:多次运行后结果一致

代码要求幂等和稳定

 

mock测试:为一个函数打桩(替换,模仿原函数的输入输出,用打桩函数替换原函数)

例 原函数从文件读取一行,对原本从文件读取一行的ReadFirstLine函数打桩替换成直接返回一行内容的字符串给下一个ProcessFirstLine函数

基准测试

测试性能,类似于单元测试

例:对服务器的Select()随机选择函数测试

其中,RunParallel是并行测试,ResetTimer()重置计时器

go test -bench=.(但是goland只能-bench .)表示运行所有基准测试