go test 的一个小技巧:禁用缓存
阅读本文大概需要 3 分钟。
大家好,我是 polarisxu。
每次执行单元测试,如果代码没有任何变动(包括可能读取的配置文件),则后续的执行,会直接读取缓存中的测试结果,同时会有一个 cached 标记。
$ go test -run ^TestPrint$ test/hello
ok test/hello 0.113s
$ go test -run ^TestPrint$ test/hello
ok test/hello (cached)
有时候可能希望能执行实际的测试,比如看日志输出,想要禁用缓存,怎么办?
碰到这样的问题,你一般会怎么获得答案?
本文介绍几种方法,对你解决其他问题可能也会有帮助。
1、查看 go test 的帮助文档
$ go help testflag
文档内容很多,初步浏览,似乎没有这样的 flag。实际上有这么一段话:
When 'go test' runs in package list mode, 'go test' caches successful
package test results to avoid unnecessary repeated running of tests. To
disable test caching, use any test flag or argument other than the
cacheable flags. The idiomatic way to disable test caching explicitly
is to use -count=1.
也就是说加上 -count=1
即可以禁用缓存。
2、在 go 官方仓库的 issue 中搜索
小提示:因为 issue 比较多,可以考虑加上 in:title 限定只在标题中搜索
其中 https://github.com/golang/go/issues/24573 里面有人提到,在 Go1.10 及以前通过 GOCACHE=off go test
禁用,Go1.11 及以上版本使用 -count=1
flag 禁用。因为 Go1.11 开始,GOCACHE=off 会影响 go.mod。
同时,在这个 issue 中,还有人提到 VSCode 中如何配置,即加上如下配置:
"go.testFlags": ["-count=1"]
3、百度或谷歌搜索
这是很多人可能会用的方案,当然,还包括在 StackOverflow、golang-nuts 邮件组上搜索。
学到了一个知识点,是不是还学到了如何找问题的答案?!授人以渔很重要。
我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。
坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio