将t.Parallel()放在测试的顶部有什么实际好处?

Kev*_*rke 3 testing go

go testing包定义了一个Parallel()函数:

并行信号表示此测试将与其他并行测试并行运行(并且仅与其一起运行).

但是当我搜索为标准库编写的测试时,我发现这个函数只有少数用途.

我的测试非常快,通常不依赖于改变共享状态,所以我一直在添加它,认为它会导致加速.但它没有在标准库中使用的事实让我停下来.添加t.Parallel()到测试中的实际好处是什么?

web*_*rc2 5

该线程(其中t.Parallel构思和讨论)表明该线程t.Parallel()仅用于慢速测试; 平均测试速度非常快,以至于并行执行的任何收益都可以忽略不计.

以下是一些引用(仅来自Russ,但没有太多反对意见):

Russ Cox [ 链接 ]:

关于什么是正确的默认值存在一些问题.我们的大多数测试运行得如此之快,以至于无需并行化.我认为这可能是正确的模型,这表明并行化是例外,而不是规则.作为一个例外,这可以通过t.Parallel()方法来适应,测试可以调用该方法来声明可以与其他测试并行运行.

Russ Cox再次[ 链接 ]:

非并行测试应该很快.他们无关紧要.如果两个测试都很慢,那么你就可以了.如果它困扰你,你可以将它们平行.如果一个测试很慢,那么,一个测试很慢.