NUnit 3.2.0 控制台运行器 System.NullReferenceException 当 运行 /domain=multiple
NUnit 3.2.0 Console Runner System.NullReferenceException when running with /domain=multiple
当 运行 /domain=multiple 在 NUnit Console Runner 中发生 NullReference 异常。
运行 不带 /domain=multiple 或带 /domain=single 的作品。 运行 使用 ReSharper 10.0.2 测试 运行ner 并检查 "Use Seperate AppDomain" 设置以我想要的方式工作并且 运行s 并行测试程序集。
我希望能够使用控制台 运行ner 对来自多个程序集的并行参数化测试进行 运行。由于这需要并行加载静态资产,因此测试需要 运行 在多个 AppDomains 中。
我创建了一个简单的单元测试解决方案来重现该问题。有两个项目。每个人都有一个测试 class,看起来像这样:
[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)
默认情况下,NUnit 3 在单独的进程中运行每个程序集(/process=Multiple
标志),因此 /domain=multiple
标志仅在与 /process=InProcess
或使用 /process=Separate
因为您的测试已经在多个 AppDomain 中,尽管在不同的进程中。如果您添加其中任何一个标志,它将按预期工作。
也就是说,NUnit 在这种情况下不应该崩溃,所以 please report it on GitHub.
当 运行 /domain=multiple 在 NUnit Console Runner 中发生 NullReference 异常。
运行 不带 /domain=multiple 或带 /domain=single 的作品。 运行 使用 ReSharper 10.0.2 测试 运行ner 并检查 "Use Seperate AppDomain" 设置以我想要的方式工作并且 运行s 并行测试程序集。
我希望能够使用控制台 运行ner 对来自多个程序集的并行参数化测试进行 运行。由于这需要并行加载静态资产,因此测试需要 运行 在多个 AppDomains 中。
我创建了一个简单的单元测试解决方案来重现该问题。有两个项目。每个人都有一个测试 class,看起来像这样:
[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)
默认情况下,NUnit 3 在单独的进程中运行每个程序集(/process=Multiple
标志),因此 /domain=multiple
标志仅在与 /process=InProcess
或使用 /process=Separate
因为您的测试已经在多个 AppDomain 中,尽管在不同的进程中。如果您添加其中任何一个标志,它将按预期工作。
也就是说,NUnit 在这种情况下不应该崩溃,所以 please report it on GitHub.