我有一个包含1000多个单元测试的项目,并且正在考虑使用xctool的parallelise选项来加快构建速度。
因此,我将其打开,并将logicTestBucketSize设置为50。测试运行,但是有些失败了,如果不使用此选项,则不会失败。
我的问题是:存储区是在自己的沙箱中独立运行还是它们共享单元测试可能设置的全局变量?这可能解释了测试之间的交叉污染
最佳答案
是。并行运行测试时,xctool将在单个进程中运行每个测试桶,并在不同进程中同时运行多个存储桶。此外,您可以使用-bucketBy class
选择是基于案例还是基于类别进行存储。除非您有包含很多测试用例的非常大的测试类,否则可能应该使用类。
您的测试现在可能会失败,尽管以前没有,因为:
只要将一个测试用例分组为相同的二进制文件,它就依赖于先前的测试用例建立的全局状态,即使来自不同的测试类也是如此。由于运行的顺序可能不同,或者根本不运行,因此该测试现在将失败。
测试会更改全局状态,并导致以后的测试失败。以前这可能不是问题,因为该测试是在其他可能受影响的测试已经运行之后运行的。
处理第一种类型的故障的一种好方法是使用存储桶大小1(按类存储模式或按案例存储模式,这取决于以后要运行的模式)来运行。