[原]Go 测试函数
版权声明:本文为博主原创文章,转载请注明来源!获取更新内容请关注我的开源项目:https://github.com/zcc0721/MasterBlockchain https://blog.csdn.net/u013137970/article/details/83747740
文章目录
1 测试程序模板
func TestFunction(t *testing.T) { var tests = []struct { in string out string }{ {“in1”, “exp1”}, {“in2”, “exp2”}, {“in3”, “exp3”}, ... } for i, tt := range tests { cache := make([]uint32, tt.cacheSize/4) generateCache(cache, tt.epoch, seedHash(tt.epoch*epochLength+1)) dataset := make([]uint32, tt.datasetSize/4) generateDataset(dataset, tt.epoch, cache) want := make([]uint32, tt.datasetSize/4) prepare(want, tt.dataset) if !reflect.DeepEqual(dataset, want) { t.Errorf("dataset %d: content mismatch: have %x, want %x", i, dataset, want) } }
}
2 测试单个函数
一个测试文件可能有多个测试函数,指定特定的测试函数运行:
go test -test.run TestXXX
TestXXX指的是测试函数名称,系统会自动匹配测试函数名称。如一个测试文件中有两个测试函数TestCheckSig和TestCheckSigSm2,那么执行测试命令:
$ go test -test.run TestCheckSig -v
=== RUN TestCheckSig
--- PASS: TestCheckSig (0.00s)
=== RUN TestCheckSigSm2
--- PASS: TestCheckSigSm2 (0.00s)
PASS
ok github.com/bytom/protocol/vm 0.014s
$ go test -test.run TestCheckSigSm2 -v
=== RUN TestCheckSigSm2
--- PASS: TestCheckSigSm2 (0.00s)
PASS
ok github.com/bytom/protocol/vm 0.013s
可见,系统会自动匹配符合TestCheckSig的测试函数名称,因此两个函数都会测试到。这里的匹配只是简单匹配,并非正则匹配。
如果TestXXX不存在,则会返回错误:
$ go test -test.run TestCheckSigSm22 -v
testing: warning: no tests to run
PASS
ok github.com/bytom/protocol/vm 0.008s
3 测试缓存
运行 Go 测试函数的时候,如果已经运行过 go test,则之后如果文件没有发生改变,则就会自动应用上次测试缓存。如下所示:
PASS
ok tester/apitests (cached)
如果不想应用上次测试缓存,则有两种方式删除缓存:
- 使用
go clean -testcache清理所有测试结果。 - 在执行
go test时添加-count=1关闭测试缓存。
方法1可以暂时清理测试缓存,方法2可以在每次执行测试的时候不使用测试缓存。

