为什么 -count=1 在 Go 测试中忽略缓存?

asa*_*f92 4 go go-testing

我知道为了避免在 Go 测试中缓存结果,您可以在命令-count=1中使用该标志go test,但为什么呢?

这是来自文档

显式禁用测试缓存的惯用方法是使用-count=1

该标志的解释count是:

-count n
    Run each test, benchmark, and fuzz seed n times (default 1).
    If -cpu is set, run n times for each GOMAXPROCS value.
    Examples are always run once. -count does not apply to
    fuzz tests matched by -fuzz.
Run Code Online (Sandbox Code Playgroud)

它没有说明任何有关缓存的信息,默认值为 1,但默认情况下不会忽略跳过缓存测试。

icz*_*cza 7

答案很简单,因为 go 工具就是这样写的。

原因是:测试输出被缓存以加速测试。如果代码不改变,测试输出也不应该改变。当然这不一定是真的,测试可能会从外部源读取信息,或者可能会使用时间和随机相关数据,这些数据可能会因运行而异。

当您使用该标志请求运行多个测试时-count,显然其目的是多次运行测试,没有逻辑只运行一次并显示n-1相同的结果。因此-count触发器会忽略缓存的结果。-count=1只会导致运行测试一次,忽略以前缓存的输出。

  • @jub0bs如果默认值为“0”,则意味着不运行测试。 (2认同)