问题:
当我两次运行相同的 go 测试时,第二次运行根本没有完成。结果是第一次运行时缓存的结果。
PASS
ok tester/apitests (cached)
链接
我已经检查了 https://golang.org/cmd/go/#hdr-Testing_flags 但没有用于此目的的 cli 标志。
问题:
是否有可能强制 go test 始终运行测试而不缓存测试结果。
testing flags docs 中描述了几个选项:
go clean -testcache:使所有测试结果过期
在您的测试运行中使用不可缓存的标志。惯用的方法是使用 -count=1
也就是说,代码或测试代码的更改将使缓存的测试结果无效(使用本地文件或环境变量时也有扩展逻辑),因此您不需要手动使测试缓存无效。
在 Go11 中,我无法使用带有模块的 GOCACHE
禁用缓存,而是使用了 -count=1
:
go test -count=1
在 Go11 之前:
GOCACHE=off go test
或者,清理测试缓存并再次运行测试:
go clean -testcache && go test
还有 GOCACHE=off
提到了 here。
go 1.11
并且在使用 GOCACHE=off
时具有 go modules 功能会给出错误 go: cannot use modules with build cache disabled
。最好使用建议的-count 1
。
GOCACHE
将在 go 1.12 中逐渐淘汰,因此现在使用 go test -count=1 ...
是更安全的选择。
build cache is disabled by GOCACHE=off, but required as of Go 1.12
我解决这个问题的方式(我在 macOS 上使用 Visual Studio Code):
代码 > 首选项 > 设置
点击设置页面右侧的...
点击Open settings.json
任何一个:
将以下代码段添加到您的 settings.json 文件 "go.testEnvVars": { "GOCACHE": "off" } 更改 go.testEnvVars 的值以包含以下内容: "GOCACHE": "off"
GOCACHE
不适用于最新版本的 Go。 VS Code 的解决方案是在设置中设置 "go.testFlags": ["-count=1"]
。
go clean -testcache ./...
也有效(在 monorepo 的顶部)