真正的单元测试是否可以并行运行?

时间:2015-09-08 15:44:56

标签: unit-testing go tdd

背景:

我正在编写大量的代码,使用go test工具和提供的"testing"软件包进行测试。我所做的大多数测试都是在TDD学科中进行单元测试。这些被测试的“单元”永远不允许依赖于持久存储,网络跳等有状态外部因素,但通常在“构造函数/构建器”函数中接收这些外部性的虚假内存实现(是的,我知道它们不是传统意义上的构造者。)

问题:

我一直困扰着go test工具总是以相同的确定性顺序运行测试函数。在少数情况下,这允许竞争条件隐藏在代码中。找到这些错误的一种方法是设置-race标志。另一种可能是始终并行运行单元测试...

问题:

是否 隔离单元测试无法或不应始终并行运行<使用{{1标志)?

1 个答案:

答案 0 :(得分:0)

parallel标志实际上是一种测试测试本身的方法(除了加速测试)。当以非确定性顺序运行时,查找测试随机中断表示测试结果不好,因为它会导致错误的代码。

Ruby的测试运行者做了一些有趣的事情(包括Rspec和Minitest) - 他们在每次运行时随机化测试顺序,但是打印用于运行的整数种子。这允许重现错误,同时仍然确保没有测试依赖于隐式排序。我不知道任何Go测试跑步者这样做,但这非常有用。