使用带有logicTestBucketSize的XCTool运行时测试失败

时间:2015-02-25 12:22:00

标签: ios xctool

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

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

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

1 个答案:

答案 0 :(得分:1)

是。当并行运行测试时,xctool将在单个进程中运行每个测试桶,并在不同进程中同时运行多个存储桶。此外,您可以选择是否根据-bucketBy class对案例或类别进行分组。您应该使用类,除非您有非常大的测试类和许多测试用例。

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

  1. 测试用例依赖于先前测试用例设置的全局状态,即使是来自不同的测试类,只要它被分组到同一个二进制文件中。此测试现在将失败,因为测试运行的顺序可能不同,或者根本不运行。
  2. 测试会改变全局状态并导致以后的测试失败。这可能不是一个问题,因为该测试是在其他可能受影响的测试已经运行之后运行的。
  3. 处理第一类故障的好方法是使用桶大小为1(逐个桶模式或逐个模式,具体取决于您稍后将运行的模式)。