使用/ domain = multiple运行时,NUnit 3.2.0 Console Runner System.NullReferenceException

时间:2016-03-25 20:47:27

标签: c# unit-testing nunit nunit-console nunit-3.0

在NUnit Console Runner中使用 / domain = multiple 运行时,会发生NullReference异常。

在没有/ domain = multiple或/ domain = single的情况下运行。使用ReSharper 10.0.2测试运行器运行"使用Seperate AppDomain"设置检查以我想要的方式工作并且并行运行测试程序集。

我希望能够使用控制台运行程序从多个程序集并行运行参数化测试。由于这需要并行加载静态资产,因此测试需要在多个AppDomain中运行。

我创建了一个简单的单元测试解决方案来重现这个问题。有两个项目。每个都有一个看起来像这样的测试类:

[TestFixture]
public class UnitTest1
{
    public static IEnumerable Test1Static
    {
        get
        {

            Console.WriteLine($"before sleep 1 - {DateTime.Now}");
            Thread.Sleep(12000);
            Console.WriteLine($"after sleep 1 - {DateTime.Now}");
            return new List<bool> { true, true };
        }
    }

    [Test, TestCaseSource(nameof(Test1Static))]
    public void TestMethod1(bool tc)
    {
        Assert.IsTrue(tc);
    }
}

以下是控制台结果:

nunit3-console.exe "UnitTestProject1\bin\Debug\UnitTestProject1.dll" "UnitTestProject2\bin\Debug\UnitTestProject2.dll" /domain=multiple

NUnit Console Runner 3.2.0
Copyright (C) 2016 Charlie Poole

Runtime Environment
   OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
  CLR Version: 2.0.50727.5485

Test Files
    UnitTestProject1\bin\Debug\UnitTestProject1.dll
    UnitTestProject2\bin\Debug\UnitTestProject2.dll


Test Run Summary
  Overall result: System.NullReferenceException: Object reference not set to an instance of an object.
   at NUnit.Common.ColorConsoleWriter.WriteLabel(String label, Object option, ColorStyle valueStyle)
   at NUnit.Common.ColorConsoleWriter.WriteLabelLine(String label, Object option, ColorStyle valueStyle)
   at NUnit.ConsoleRunner.ResultReporter.WriteSummaryReport()
   at NUnit.ConsoleRunner.ConsoleRunner.RunTests(TestPackage package, TestFilter filter)
   at NUnit.ConsoleRunner.Program.Main(String[] args)

1 个答案:

答案 0 :(得分:2)

默认情况下,NUnit 3在单独的进程(/process=Multiple标志)中运行每个程序集,因此/domain=multiple标志仅在与/process=InProcess或{一起使用}时才有意义{1}}因为您的测试已经在多个AppDomain中,尽管在不同的过程中。如果你添加其中任何一个标志,它将按预期工作。

也就是说,NUnit不应该在这种情况下崩溃,所以please report it on GitHub.