NUnit 3.2.0 Console Runner System.NullReferenceException 与 /domain=multiple 一起运行时

Posted

技术标签:

【中文标题】NUnit 3.2.0 Console Runner System.NullReferenceException 与 /domain=multiple 一起运行时【英文标题】:NUnit 3.2.0 Console Runner System.NullReferenceException when running with /domain=multiple 【发布时间】:2016-03-25 20:47:26 【问题描述】:

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

在不使用 /domain=multiple 或使用 /domain=single 的情况下运行。使用 ReSharper 10.0.2 测试运行程序运行并选中“使用单独的 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】:

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

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

【讨论】:

以上是关于NUnit 3.2.0 Console Runner System.NullReferenceException 与 /domain=multiple 一起运行时的主要内容,如果未能解决你的问题,请参考以下文章

在命令行上更新nunit-console

NUnit 有时以“无法定位夹具”结尾

寻找 assembly-name.dll.config 的 nUnit 测试

无法通过控制台运行我的 SpecFlow 功能代码

Oracle ODP.NET 托管驱动程序在 64 位中的运行速度比在 32 位中慢 50-100%

NUnit