Go 测试函数

1 测试程序模板

func TestFunction(t *testing.T) {
    var tests = []struct {     // Test table
        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指的是测试函数名称,系统会自动匹配测试函数名称。如一个测试文件中有两个测试函数TestCheckSigTestCheckSigSm2,那么执行测试命令:

$ 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)

如果不想应用上次测试缓存,则有两种方式删除缓存:

  1. 使用 go clean -testcache 清理所有测试结果。
  2. 在执行 go test 时添加 -count=1 关闭测试缓存。

方法1可以暂时清理测试缓存,方法2可以在每次执行测试的时候不使用测试缓存。

4 参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值