NUnit如何仅限制两个特定测试类互斥并行以提升执行效率?
更高效的测试并行优化方案
用NUnit的**测试集合(Test Collection)**就能精准解决这个问题,不用牺牲那两个类和其他测试的并行能力:
- 给那两个操作同一文件的测试类打上同一个
[Collection("Shared File Group")]标记,NUnit会自动保证这个集合里的测试类不会互相并行,但它们完全可以和集合外的测试类一起跑。 - 其他测试类继续保留
[Parallelizable(ParallelScope.All)],不影响它们之间的并行执行。
给你贴个代码示例:
// 第一个操作共享文件的测试类 [Collection("Shared File Group")] public class FileTestClassA { [Test] public void WriteFileTest() { // 操作共享文件的测试代码 } } // 第二个操作共享文件的测试类 [Collection("Shared File Group")] public class FileTestClassB { [Test] public void ReadAndModifyFileTest() { // 操作共享文件的测试代码 } } // 普通并行测试类 [Parallelizable(ParallelScope.All)] public class RegularTestClass { [Test] public void NormalBusinessTest() { // 常规测试逻辑 } }
如果还想让这两个类内部的测试方法也能并行(只要不同时跨类执行),可以给集合加个定义,开启类内并行:
[CollectionDefinition("Shared File Group")] [Parallelizable(ParallelScope.Self)] public class SharedFileCollection : ICollectionFixture<AnySharedFixture> { // 这里可以空着,或者放集合共用的fixture逻辑 }
这么配置后,那两个文件操作类之间不会冲突,各自内部的测试还能并行,同时也不耽误和其他测试类一起跑,比直接设ParallelScope.None高效多了。
内容的提问来源于stack exchange,提问作者Arnon Axelrod
相关产品推荐
相关产品推荐

