这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
本次笔记将记录Go语言的依赖管理与单测
Go Moudle
经过go path与go vender的演变,最后诞生了go module来管理依赖。go module
go module是通过go.mod来管理引用的依赖,我们可以在终端通过输入go get/go mod xxx来获取所需的依赖包。GO MODULE下所有依赖包存放于$GOPATH/pkg/mod目录下
依赖管理三要素
- 配置文件 描述依赖
go.mod - 中心仓库管理依赖库
Proxy - 本地工具
go get/mod
依赖配置 go.mod
module:定义项目的模块路径。go:设置你的的 Go 版本。require:设置一个特定的模块版本。exclude:从使用中排除一个特定的模块版本。replace:将一个模块版本替换为另外一个模块版本。
个人认为go.mod非常类似于maven的依赖管理文件
测试
无论什么项目,都必要进行测试的,而go的测试分为
- 单元测试
- 集成测试
- 回归测试
上图截了一下青训课的ppt的示意图,以便我更好理解
这里主要着重讲解单元测试
单元测试
如何进行测试
首先我写了一个JudgePassLine.go文件,代码非常简单
生成测试文件:右键-生成-文件测试,即可生成一个JudgePassLine_test.go的文件
向TestJudgePassLine函数中写入你的测试内容
isPass := JudgePassLine(70)
assert.Equal(t, true, isPass)
isPass = JudgePassLine(50)
assert.Equal(t, false, isPass)
随后,可以右键运行文件,这里运行的是覆盖率
控制台便会打印出覆盖率coverage: 6.4%,项目的包也会显示该文件的覆盖率所占百分比
除此之外,我们也可以在控制台输入相应命令,来进行单元测试
`go test`携带`-v`参数表示输出完整的测试结果。
`go test`携带 `-cover`参数可以查看测试覆盖率。
`go test`携带 `-coverprofile=c.out`参数可以将相关信息输出到当前文件夹下面的`c.out`文件中。
如果只需要测试某几个函数,可以携带 `-run`参数,它对应一个正则表达式,例如运行`go test -run=Set`命令就只会执行函数名中带`Set`的测试函数。
如下图
在这里需要理解一下覆盖率的作用
- 衡量代码是否经过了足够的测试
- 评价项目的测试水准
- 评估项目是否达到了高水准测试等级
一般在项目中,覆盖率:`50%~60%`为正常,覆盖率:`80%+`代表项目代码较完善
Mock
当测试文件被修改后,可能会导致测试失败或错误率增高,而Mock就是为了解决此问题诞生的
monkey: github.com/bouk/monkey 一个开源的mock测试库,可以对method或者实例的方法进行mock。
运行时通过Go的unsafe包能够将内存中函数地址替换为运行时函数的地址,把待打桩函数或方法的实现跳转。
使用方法可自行去GitHub里面查询