ChatGPT解决这个技术问题 Extra ChatGPT

强制重新测试或禁用测试缓存

问题:

当我两次运行相同的 go 测试时,第二次运行根本没有完成。结果是第一次运行时缓存的结果。

PASS    
ok      tester/apitests    (cached)

链接

我已经检查了 https://golang.org/cmd/go/#hdr-Testing_flags 但没有用于此目的的 cli 标志。

问题:

是否有可能强制 go test 始终运行测试而不缓存测试结果。


M
Marc

testing flags docs 中描述了几个选项:

go clean -testcache:使所有测试结果过期

在您的测试运行中使用不可缓存的标志。惯用的方法是使用 -count=1

也就是说,代码或测试代码的更改将使缓存的测试结果无效(使用本地文件或环境变量时也有扩展逻辑),因此您不需要手动使测试缓存无效。


如果您正在针对移动依赖项进行测试,例如您设置/拆除依赖项而不是您的代码的数据库,它仍然很有用。看起来 OP 正在针对非存根 API 进行测试,这正是他们提出问题的原因。
是否可以仅针对特定测试清理缓存?
请注意,go clean -testcache ./... 也有效(在 monorepo 的顶部)
我还打开了一个问题以使其变得更好:github.com/golang/go/issues/39056?ts=4
很好的答案,我需要这个,因为我用一组不同的环境变量运行了两次测试套件。这是触发必须通过相同系列测试的不同实现的测试所必需的。这有助于防止代码重复。
M
Muhammad Soliman

在 Go11 中,我无法使用带有模块的 GOCACHE 禁用缓存,而是使用了 -count=1

go test -count=1

在 Go11 之前:

GOCACHE=off go test

或者,清理测试缓存并再次运行测试:

go clean -testcache && go test 

s
soltysh

还有 GOCACHE=off 提到了 here


对于 go 1.11 并且在使用 GOCACHE=off 时具有 go modules 功能会给出错误 go: cannot use modules with build cache disabled。最好使用建议的-count 1
您是对的,根据 github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE 将在 go 1.12 中逐渐淘汰,因此现在使用 go test -count=1 ... 是更安全的选择。
build cache is disabled by GOCACHE=off, but required as of Go 1.12
d
distortedsignal

我解决这个问题的方式(我在 macOS 上使用 Visual Studio Code):

代码 > 首选项 > 设置

点击设置页面右侧的...

点击Open settings.json

任何一个:

将以下代码段添加到您的 settings.json 文件 "go.testEnvVars": { "GOCACHE": "off" } 更改 go.testEnvVars 的值以包含以下内容: "GOCACHE": "off"


从 Go 1.12 开始需要构建缓存,因此设置 GOCACHE 不适用于最新版本的 Go。 VS Code 的解决方案是在设置中设置 "go.testFlags": ["-count=1"]

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅