如何在类中并行运行NUnit测试,但不能与其他类测试一起运行?

时间:2017-10-03 22:09:18

标签: c# nunit

我在NUnit 3.8使用Visual Studio Professional 2017

我在[assembly: Parallelizable(ParallelScope.Fixtures)]文件中指定了AssemblyInfo.cs。这使得在类中测试的默认行为不能与该类中的其他测试并行运行,但它们可以与其他类的测试并行运行。

我想知道是否可以保留默认行为,但是逐个类别地反转逻辑。我希望在特定类中的测试彼此并行运行,而不是与其他类的测试同时运行。

请使用以下代码。如果我要运行下面的所有测试 - 我希望TestClassA中的所有测试都能并行执行,直到完成所有测试,然后TestClassB中的所有测试都会并行执行。

[NonParallelizable]
public class TestClassA
{
    [Test]
    [Parallelizable(ParallelScope.Children)]
    [TestCase(1, 1)]
    [TestCase(2, 2)]
    [TestCase(3, 3)]
    [TestCase(4, 4)]
    public void TestIntsA(int a, int b)
    {
        System.Threading.Thread.Sleep(1000);
        Assert.AreEqual(a, b);
    }        
}

[NonParallelizable]
public class TestClassB
{
    [Test]
    [Parallelizable(ParallelScope.Children)]
    [TestCase(1, 2)]
    [TestCase(2, 3)]
    [TestCase(3, 4)]
    [TestCase(4, 5)]
    public void TestIntsB(int a, int b)
    {
        System.Threading.Thread.Sleep(1000);
        Assert.AreEqual(a, b);
    }        
}

基于this NUnit documentation(下面的具体摘录),我认为这是可能的。

  

采用并行方法的非并行类:
  这些方法只能彼此并行运行,而不是与任何其他类的测试方法一起运行。

但是,当我使用三个工作线程运行上述代码时,前三个测试成功运行,然后不再启动测试。测试运行暂停,直到我取消测试运行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您编写的代码示例正确无误。有一些错误,例如https://github.com/nunit/nunit/issues/2438,这些错误导致了v3.8中的测试用例并行化问题。该团队目前正致力于v3.8.2,这应解决这些问题。

已经解决了许多问题 - 您可能希望尝试使用最新版本的master来查看您的案例是否已修复:

https://ci.appveyor.com/project/CharliePoole/nunit/build/3.9.0-dev-04489/artifacts