0

我有一个包含超过 1000 个单元测试的项目,并且正在考虑通过使用 xctool 的并行化选项来加快构建速度。

所以我打开了它并将 logicTestBucketSize 设置为 50。测试运行,但有些失败,当不使用此选项时没有失败。

我的问题:存储桶是在自己的沙箱中独立运行,还是共享单元测试可能设置的全局变量?这可能解释了测试之间的一些交叉污染

4

1 回答 1

1

是的。并行运行测试时,xctool 将在单个进程中运行每个测试桶,并在不同进程中同时运行多个桶。此外,您可以使用-bucketBy class. 除非您有非常大的测试类和许多测试用例,否则您可能应该使用类。

您的测试现在可能会失败,尽管之前没有,因为:

  1. 一个测试用例依赖于前一个测试用例设置的全局状态,即使是来自不同的测试类,只要它被分组到同一个二进制文件中。该测试现在将失败,因为测试运行的顺序可能不同,或者根本不运行。
  2. 测试会更改全局状态并导致以后的测试失败。这在以前可能不是问题,因为该测试是在其他可能受到影响的测试已经运行之后运行的。

处理第一类故障的一个好方法是使用大小为 1 的存储桶运行(按类别模式或按案例模式运行,具体取决于您稍后将运行的模式)。

于 2015-03-03T19:39:14.840 回答