NUnit 3コンソールランナーを使用して複数のアセンブリからパラレル化されたテストを実行できます。重要なのは、静的なイニシャライザを並列に実行できるようにすることです(テストの遅い部分)。コンソールランナーの複数のアセンブリからNUnit3テストを並行して実行
私はこれをVisualStudioのReSharper 10テストランナーを使用して動作させることができます。 NUnit 3コンソールランナーで同じプロジェクトを実行すると、静的イニシャライザはparrallelで実行されません。
問題を再現するための簡単なユニットテストソリューションを作成しました。 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);
}
}
コンソールランナー結果:
C:\dev>"C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" "C:\Users\username\Documents\Visual Studio 2015\Projects\testn
unit1\UnitTestProject1\bin\Debug\UnitTestProject1.dll" "C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProjec
t2\bin\Debug\UnitTestProject2.dll"
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: 4.0.30319.42000
Test Files
C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProject1\bin\Debug\UnitTestProject1.dll
C:\Users\username\Documents\Visual Studio 2015\Projects\testnunit1\UnitTestProject2\bin\Debug\UnitTestProject2.dll
before sleep 1 - 4/6/2016 3:13:34 PM
after sleep 1 - 4/6/2016 3:13:46 PM
before sleep 2 - 4/6/2016 3:13:47 PM
after sleep 2 - 4/6/2016 3:13:59 PM
Run Settings
WorkDirectory: C:\dev
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.5.2
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
NumberOfTestWorkers: 8
Test Run Summary
Overall result: Passed
"'Parallel'の値は '--process'オプションでは無効です。 https://github.com/nunit/docs/wiki/Console-Command-Lineに基づいて、私は "--process:Multiple"を使ってみました。これにより、テストを実行することができましたが、そのオプションがない場合と同じ結果が得られました。私は、コンソールランナーがテストケースを並行して実行していることを証明することができました。各アセンブリの静的イニシャライザを並行して実行しているわけではありません。 – rsideb
申し訳ありませんが、私の間違いです。私は複数を意味しました。 2つのアセンブリが同時に実行されます。静的に初期化されたものが共通の外部リソースに依存しない場合、それらを並列に実行することが期待されます。そうでない場合は、簡単なレトロケースで問題を提出することができます。 – Charlie