1

NUnit Console Runner で/domain=multipleを指定して実行すると、NullReference 例外が発生します。

/domain=multiple または /domain=single を指定せずに実行すると動作します。「Use Seperate AppDomain」設定をオンにしてReSharper 10.0.2テストランナーを使用して実行すると、希望どおりに機能し、テストアセンブリが並行して実行されます。

コンソール ランナーを使用して、複数のアセンブリからパラメーター化されたテストを並行して実行できるようにしたいと考えています。これには静的アセットを並行してロードする必要があるため、テストは複数の AppDomains で実行する必要があります。

問題を再現するための簡単な単体テスト ソリューションを作成しました。2つのプロジェクトがあります。それぞれに、次のような 1 つのテスト クラスがあります。

[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)
4

1 に答える 1

2

デフォルトでは、NUnit 3 は各アセンブリを個別のプロセス (/process=Multipleフラグ) で実行するため、テストが既に複数の AppDomains にあるため、異なるプロセスではあるが、/domain=multipleフラグは組み合わせて使用​​する場合にのみ意味があります。これらのフラグのいずれかを追加すると、期待どおりに機能します。/process=InProcess/process=Separate

とはいえ、この状況で NUnit がクラッシュすることはないはずなので、GitHub で報告してください。

于 2016-03-26T10:57:41.013 に答える