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


106

问题:

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

PASS    
ok      tester/apitests    (cached)

链接

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

题:

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

Answers:


161

测试标志docs中描述了一些选项:

  • go clean -testcache:使所有测试结果失效
  • 在测试运行中使用不可缓存的标志。惯用的方法是使用-count=1

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


4
如果您要针对移动的依赖项进行测试(例如,在其中设置/拆除依赖项而不是代码的数据库)中,它仍然很有用。看起来OP正在针对非存根API进行测试,这正是他们提出问题的原因。
joakim

是否只能为特定测试清除缓存?
nickcamillo

3
请注意,它go clean -testcache ./...也可以工作(在monorepo的顶部)
voutasaurus

我也提出了一个要改善的问题:github.com/golang/go/issues/39056?ts=4
星期三

23

在Go11中,我无法通过GOCACHE模块禁用缓存,而是使用-count=1

go test -count=1

在Go11之前:

GOCACHE=off go test

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

go clean -testcache && go test 

19

这里也GOCACHE=off提到


5
对于使用go 1.11并具有go模块功能GOCACHE=off会给出错误go: cannot use modules with build cache disabled。更好的是使用建议-count 1
zdebra

1
没错,根据github.com/golang/go/issues/26809#issuecomment-410477084, GOCACHE它将在go 1.12中逐步淘汰,因此go test -count=1 ...现在使用是更安全的选择。
soltysh

build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula

7

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

代码>首选项>设置

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

请点击 Open settings.json

要么:

  1. 将以下代码段添加到settings.json文件中

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. 更改的值go.testEnvVars包括以下内容:"GOCACHE": "off"

4
从Go 1.12开始需要构建缓存,因此该设置GOCACHE不适用于Go的最新版本。VS Code的解决方案是在设置"go.testFlags": ["-count=1"]中进行设置。
Armand Grillet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.