零基础之go语言6 | 青训营笔记

68 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

image.png

  • module:定义项目的模块路径。
  • go:设置你的的 Go 版本。
  • require:设置一个特定的模块版本。
  • exclude:从使用中排除一个特定的模块版本。
  • replace:将一个模块版本替换为另外一个模块版本。

个人认为go.mod非常类似于maven的依赖管理文件

测试

无论什么项目,都必要进行测试的,而go的测试分为

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

image.png

上图截了一下青训课的ppt的示意图,以便我更好理解

这里主要着重讲解单元测试

单元测试

如何进行测试

image.png

首先我写了一个JudgePassLine.go文件,代码非常简单

生成测试文件:右键-生成-文件测试,即可生成一个JudgePassLine_test.go的文件

image.png

image.png

image.png

向TestJudgePassLine函数中写入你的测试内容
isPass := JudgePassLine(70)
assert.Equal(t, true, isPass)
isPass = JudgePassLine(50)
assert.Equal(t, false, isPass)

image.png

随后,可以右键运行文件,这里运行的是覆盖率

image.png

image.png

控制台便会打印出覆盖率coverage: 6.4%,项目的包也会显示该文件的覆盖率所占百分比

除此之外,我们也可以在控制台输入相应命令,来进行单元测试
`go test`携带`-v`参数表示输出完整的测试结果。
`go test`携带 `-cover`参数可以查看测试覆盖率。
`go test`携带 `-coverprofile=c.out`参数可以将相关信息输出到当前文件夹下面的`c.out`文件中。
如果只需要测试某几个函数,可以携带 `-run`参数,它对应一个正则表达式,例如运行`go test -run=Set`命令就只会执行函数名中带`Set`的测试函数。
如下图

image.png

在这里需要理解一下覆盖率的作用
-   衡量代码是否经过了足够的测试
-   评价项目的测试水准
-   评估项目是否达到了高水准测试等级

一般在项目中,覆盖率:`50%~60%`为正常,覆盖率:`80%+`代表项目代码较完善

Mock

当测试文件被修改后,可能会导致测试失败或错误率增高,而Mock就是为了解决此问题诞生的

monkey: github.com/bouk/monkey 一个开源的mock测试库,可以对method或者实例的方法进行mock。
运行时通过Go的unsafe包能够将内存中函数地址替换为运行时函数的地址,把待打桩函数或方法的实现跳转。
使用方法可自行去GitHub里面查询