东风夜放花千树。更吹落、星如雨。宝马雕车香满路。凤箫声动,玉壶光转,一夜鱼龙舞。蛾儿雪柳黄金缕。笑语盈盈暗香去。众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。 —— 南宋.辛弃疾 《青玉案·元夕》
一、基础
go test命令用于对Go语言编写的程序进行测试,会自动读取源码目录下面名为
*_test.go
的源码文件,生成并运行测试用的可执行文件并输出结果信息。- 查看命名参数使用方法
go help testflag
- 常用参数
- -v:显示测试的详细命令
- -bench regexp:执行正则匹配的基准测试函数,如
-bench=.
或-bench '^(BenchmarkFib)$'
- -cover:开户测试覆盖率
- -run regexp:只运行正则匹配的函数
- 查看命名参数使用方法
测试分类
- 功能测试
- 功能测试文件名必须为
xxx_test.go
- 功能测试的函数名必须为
TestXxx
,即大驼峰命名法 - 功能测试函数参数必须为
t *testing.T
- t.Fail()
- t.FailNow
- t.Log()
- t.Logf()
- t.Error()
- t.Errorf()
- t.Fatal()
- t.Fatalf()
- 功能测试文件名必须为
- 性能测试,也称基准测试
- 性能测试文件名同上要求
- 性能测试的函数名必须为以
BenchmarkXxx
,即大驼峰命名法 - 性能测试函数参数必须为
b *testing.B
- 执行go test 命令时需要加
-bench
参数,可为正则表达式或具体的被测文件
- 样例测试,也称示例测试
- 样例测试文件名同上要求
- 样例测试的函数名必须为以
ExampleXxx
,即大驼峰命名法 - 样例测试函数参数没有强制要求
- 模糊测试,也称fuzzing测试(1.18引入)
- 文件名同上要求
- 函数名固定以FuzzXxx开头
- 函数固定以
*testing.F
类型做为入参 - 两个函数
- t.Add:用于开发者输入模糊测试的种子数据,fuzzing根据这些种子数据自动随机生成更多测试数据
- t.Fuzz:开始运行模糊测试,t.Fuzz的入参是一个Fuzz Target函数
- 功能测试
相关命令
- go env GOCACHE,查看缓存目录
- go clean -cache,删除所有缓存
- go clean -testcache,删除测试缓存
二、使用
- list.go
1 | package unit |
- list_test.go
1 | package unit |
- 执行测试
- 功能测试
go test -cover -v list_test.go list.go
- 基准测试
go test -bench=. -cover -v
- 对于TestFib函数
expect = 23
,执行go test -bench=. -cover -v
会报错,可以通过-run
选择不测试该函数 - 只测试满足正则匹配的函数
go test -v -cover -run '^Benchmark$' -bench=.
- 对于TestFib函数
- 样例测试
- 模糊测试
go test -fuzz=Fuzz
,也可指定具体的函数-fuzz=FuzzReverse
- 功能测试