分享
  1. 首页
  2. 文章

go test的坑

nobody · · 6018 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

众所周知,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官方的文档,确实缓存造成的。从Go1.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"]

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:nobody

查看原文:go test的坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
6018 次点击
2 回复 | 直到 2025年05月08日 07:58:26
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏