我知道为了避免在 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,但默认情况下不会忽略跳过缓存测试。
答案很简单,因为 go 工具就是这样写的。
原因是:测试输出被缓存以加速测试。如果代码不改变,测试输出也不应该改变。当然这不一定是真的,测试可能会从外部源读取信息,或者可能会使用时间和随机相关数据,这些数据可能会因运行而异。
当您使用该标志请求运行多个测试时-count,显然其目的是多次运行测试,没有逻辑只运行一次并显示n-1相同的结果。因此-count触发器会忽略缓存的结果。-count=1只会导致运行测试一次,忽略以前缓存的输出。