使用带有 logicTestBucketSize 的 XCTool 运行 时测试失败
Test failing when run with XCTool with logicTestBucketSize
我有一个包含超过 1000 个单元测试的项目,并且正在考虑通过使用 xctool 的并行化选项来加速构建。
所以我打开它并将 logicTestBucketSize 设置为 50。测试 运行,但有些失败但在不使用此选项时并未失败。
我的问题:存储桶 运行 是独立地在它们自己的沙箱中还是它们共享单元测试可能设置的全局变量?这可能解释了测试之间的一些交叉污染
是的。当 运行ning 并行测试时,xctool 将 运行 单个进程中的每个测试桶,以及 运行 不同进程中同时的多个桶。此外,您可以 select 是否根据案例或 class 使用 -bucketBy class
进行分桶。您可能应该使用 class 除非您有非常大的测试 classes 和许多测试用例。
您的测试现在可能会失败,尽管之前不会,因为:
- 测试用例依赖于先前测试用例设置的全局状态,即使来自不同的测试 class,只要它被分组到相同的二进制文件中。这个测试现在会失败,因为测试 运行 的顺序可能不同,或者根本没有 运行。
- 一个测试改变了全局状态并导致后面的测试失败。以前这可能不是问题,因为该测试是 运行 在其他可能受影响的测试已经 运行.
之后
处理第一类故障的一个好方法是 运行 桶大小为 1(bucket-by-class 模式或 bucket-by-case 模式,具体取决于什么模式你稍后 运行ning)。
我有一个包含超过 1000 个单元测试的项目,并且正在考虑通过使用 xctool 的并行化选项来加速构建。
所以我打开它并将 logicTestBucketSize 设置为 50。测试 运行,但有些失败但在不使用此选项时并未失败。
我的问题:存储桶 运行 是独立地在它们自己的沙箱中还是它们共享单元测试可能设置的全局变量?这可能解释了测试之间的一些交叉污染
是的。当 运行ning 并行测试时,xctool 将 运行 单个进程中的每个测试桶,以及 运行 不同进程中同时的多个桶。此外,您可以 select 是否根据案例或 class 使用 -bucketBy class
进行分桶。您可能应该使用 class 除非您有非常大的测试 classes 和许多测试用例。
您的测试现在可能会失败,尽管之前不会,因为:
- 测试用例依赖于先前测试用例设置的全局状态,即使来自不同的测试 class,只要它被分组到相同的二进制文件中。这个测试现在会失败,因为测试 运行 的顺序可能不同,或者根本没有 运行。
- 一个测试改变了全局状态并导致后面的测试失败。以前这可能不是问题,因为该测试是 运行 在其他可能受影响的测试已经 运行. 之后
处理第一类故障的一个好方法是 运行 桶大小为 1(bucket-by-class 模式或 bucket-by-case 模式,具体取决于什么模式你稍后 运行ning)。