go test的坑

栏目: Go · 发布时间: 7年前

内容简介:众所周知,golang自带了单元测试,写的程序都会先进行一遍单元测试。最近在写微信分享的是,签名参数中用到了时间戳,下面的代码,在命令行执行这确实有点不科学,写了这么多的单元测试从未出现过如此这样的问题。这样的测试几乎可能说没有多大意义,比如你第一次测试成功了,你改了入参或者你正测试一个请求,你得到的结果仍然是后第一次一模一样的。这段测试代码在Vscode执行也是一样的,但是在Goland编译器中点击执行按钮并没有出现这个问题,也就是说Goland编译器可能自动处理了。执行测试命令出现上面的猜测是缓存造成的

众所周知,golang自带了单元测试,写的程序都会先进行一遍单元测试。最近在写微信分享的是,签名参数中用到了时间戳,下面的代码,在命令行执行 go test -v filename_test.go ,每次打印出来的时间戳将会是一模一样的。

// TestSha1 ..

func TestSha1(t *testing.T) {
    s := "sha1 test"
    res := util.EncryptWithSha1(s)
    t.Log("res:", res)
    timestamp := time.Now().Unix()
    t.Log(timestamp)
}

这确实有点不科学,写了这么多的单元测试从未出现过如此这样的问题。这样的测试几乎可能说没有多大意义,比如你第一次测试成功了,你改了入参或者你正测试一个请求,你得到的结果仍然是后第一次一模一样的。这段测试代码在Vscode执行也是一样的,但是在Goland编译器中点击执行按钮并没有出现这个问题,也就是说Goland编译器可能自动处理了。执行测试命令出现上面的猜测是缓存造成的。因为从测试结果也可以看出:

PASS
ok      command-line-arguments    (cached)

看了看golang官方的文档,确实缓存造成的。从 Go 1.10开始,测试结果将被缓存,golang缓存测试结果这点在官方文档也能看到说明。详情见:https://golang.org/cmd/go/#hdr-Testing_flags。

go test 以包列表模式运行时, go test 会缓存成功的包的测试结果以避免不必要的重复测试。当然,有时候我们测试的时候并不喜欢有缓存,我们可以手动禁用缓存。可以通过下列方式禁用缓存:

  • 带上-count=1参数禁用缓存。

    如,执行下面命令测试,便会禁用缓存测试结果

go test -v -count=1 filename_test.go
  • 手动清除测试缓存

除了在执行测试命令的时候加上禁用缓存参数,我们还可以执行下面的命令手动清除缓存,需要注 意的是,每次都得清除,不然下次执行的还是上次的结果。

go clean -testcache
  • 环境变量设置法

除了上面两种方式,还可以通过环境变量来改变。我们只需要设置GOCACHE=off即可禁用缓存,不过这样执行测试命令的时候会明显感觉有点慢,这很正常,肯定没有直接用缓存的结果快。但我对比了第一种方式,发现加行-count=1 参数这种方式比设置环境变量这种效率要高,速度要快点。

所以,在用golang测试,千万不要只仅仅用go test就完了,必要时还得加上需要的参数,有些或许连-v参数都不会加,事实上这样是不会打印出log日志的。加上-count就更完美了。

go test -v -count=1 filename_test.go

在VsCode中要起效,也是需要在设置中加上此参数的。如下:

"go.testFlags": ["-v","-count=1"]

以上所述就是小编给大家介绍的《go test的坑》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP and MySQL Web Development

PHP and MySQL Web Development

Luke Welling、Laura Thomson / Sams / July 25, 2007 / $49.99

Book Description PHP and MySQL Web Development teaches you to develop dynamic, secure, commerical Web sites. Using the same accessible, popular teaching style of the three previous editions, this b......一起来看看 《PHP and MySQL Web Development》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具