tldr:用-shuffle off,on,N
flag随机对测试和基准的执行顺序。
作为一般指南,彼此依赖的单位测试不良,并且它们的顺序弄乱了结果。
一个“技巧”,我看到了一些代码库,以减轻和捕获单位测试结果依赖订单的问题而不是使用地图中的表驱动测试中的数组。
TestMyFunc(t *testing.T) {
for name, _ := range map[string]struct{}{} {
t.Run(name, func(t *testing.T) {
...
})
}
}
这背后的原因是,不能保证地图迭代的顺序,因此在不同的运行下,测试可能以不同的顺序运行,从而更难依靠顺序。
但是,从1.17开始,您可以“随机化测试和基准的执行顺序。”
如go helm testflag
状态
-shuffle off,on,N
Randomize the execution order of tests and benchmarks.
It is off by default. If -shuffle is set to on, then it will seed
the randomizer using the system clock. If -shuffle is set to an
integer N, then N will be used as the seed value. In both cases,
the seed will be reported for reproducibility.