这是我参与「第五届青训营 」伴学笔记活动的第五天。
测试 测试是避免事故的最后一道屏障。 测试的分类 :回归测试、集成测试、单元测试 从上到下覆盖率逐渐变大,成本逐渐降低。
单元测试是是在开发阶段,对单独的函数、模块做功能验证,是开发人关注的重点。
单元测试基本规范 所有测试文件以_test.go结尾 函数的命名 func TestXxx(*testing T) 初始化逻辑放到TestMain中 func TestMain(m *testing.M)
函数测试
go func TestMain(m *testing.m){ //测试前的数据装载,配置初始化等前置工作 code := m.Run() //测试后,释放资源的收尾工作 os.Exit(code) }
使用go test -v package 显示详细信息进行测试,测试从TestMain进入。
判断相等,使用断言
```go
import "github.com/stretchr/testify/assert"
...
assert.Equal(t,expectPutput,output)
```
覆盖率测试
```go
测试命令: go test xxx_test.go xxx.go --cover
```
一般要求覆盖率在50-60,较高的要求覆盖率在80
依赖测试 稳定(能在任何时间、环境运行测试) 幂等(每一次测试运行都应产生与之前一样的结果) 使用mock机制 将函数在运行时替换成自己写的函数,避免文件或者原函数被改变,但是这里要求对原本的函数输出有了解。
这里遇了一个问题,就是在使用monkey进行函数替换的时候无效,查看了monkey文档和其他资料需要在测试时 go test -v -gcflags=-l 将函数级联优化关闭,坑。 这里具体的使用,比如说当每个功能或者数据库还没有是现实时,又需要对方的回应,可以自己通过mock创造一些回应,以便自己这边代码正常开发运行。
基准测试 对当前代码进行和分析并且优化。
这里由于个人原因需要出门,未完待续....