2016-04-06 18 views
1

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 

答えて

1

あなたは並列プロセスで2つのアセンブリを実行するためにNUnitのを告げていません。 --process:コマンドラインに並行して追加します。 http://github.com/nunit/docs.wikiでバージョン3のドキュメントを読んで、古いバージョンのドキュメントを読まないことをお勧めします。

パフォーマンスによっては、プロセスあたりの並列スレッド数(マシンのデフォルト値は8であることが示されています)を減らすことができます。

+0

"'Parallel'の値は '--process'オプションでは無効です。 https://github.com/nunit/docs/wiki/Console-Command-Lineに基づいて、私は "--process:Multiple"を使ってみました。これにより、テストを実行することができましたが、そのオプションがない場合と同じ結果が得られました。私は、コンソールランナーがテストケースを並行して実行していることを証明することができました。各アセンブリの静的イニシャライザを並行して実行しているわけではありません。 – rsideb

+0

申し訳ありませんが、私の間違いです。私は複数を意味しました。 2つのアセンブリが同時に実行されます。静的に初期化されたものが共通の外部リソースに依存しない場合、それらを並列に実行することが期待されます。そうでない場合は、簡単なレトロケースで問題を提出することができます。 – Charlie

関連する問題