2016-11-02 24 views
0

私のC#プロジェクト(VisualStudio 2015Nunit)にユニットテストがあります。私は異なるパラメータでさまざまな状況でメソッドをチェックしたい、それを達成するために、私はTestCasesを使用しました。各テストメソッドは非常に遅く動作します。数秒で、私のプロジェクトではTestCasesが大きくなります。並列テストケースを使用した.NETテストフレームワーク

これでテストに数分かかります。私はこれらのテストを並行して、各テストを別々に動かすことで試行しました。 - Nunitは、TestFixturesを並列実行することを許可します - Nunit Documentation。それは状況をわずかに変えたが、それほど大きくはなかった。私は、TestFixtureレベルではなく、テストケースレベルで並列テストをしたいと思います。私はそれをする方法を知らない。 NunitXunitMBUnitなどのドキュメントを読んだところ、その答えが見つかりませんでした。

私はどのようにしてテストを同時に実行することができますか?どのフレームワークを使用するのですか?

擬似コードで私のテスト例:

public static class GeneralTestCases 
{ 
    public static IEnumerable TestStoresCredentials 
    { 
     get 
     { 
      yield return new TestCaseData(...).SetName("incorrect password"); 
      ... 
      yield return new TestCaseData(...).SetName("incorrect login"); 
     } 
    } 
} 

[ TestFixture ] 
[ Parallelizable ] 
internal class GetProducts : BaseTest 
{ 
    [ Test ] 
    [ TestCaseSource(typeof(GeneralTestCases), "TestCases") ] 
    public void ReceiveProducts(TestCase case) 
    { 
     // ------------ Arrange 
     var service = CreateService(case.User, case.Key, ...); 

     // ------------ Act 
     var serviceResponse = service.GetProducts(case.SpecialType); 

     // ------------ Assert 
     ... 
     serviceResponse.Message.Should().NotBeNullOrEmpty(); 
     ... 
    } 
} 


[ TestFixture ] 
[ Parallelizable ] 
internal class GetOrders : BaseTest 
{ 
    [ Test ] 
    [ TestCaseSource(typeof(GeneralTestCases), "TestCases") ] 
    public void ReceiveOrders(TestCase case) 
    { 
     // ------------ Arrange 
     var service = CreateService(case.User, case.Key, ...); 

     // ------------ Act 
     var serviceResponse = service.GetOrders(case.SpecialType); 

     // ------------ Assert 
     ... 
     serviceResponse.Message.Should().NotBeNullOrEmpty(); 
     ... 
    } 
} 

enter image description here

アップデート1: 私はnCrunchを考えているが、私はそれが

+0

多分これはhttps://stackoverflow.com/questions/3313163/how-can-i-run-nunit-tests-in-parallel – C1sc0

答えて

0
助けたりしませんしません

のxUnitは、デフォルトで各テストクラス(テストコレクション)を並列に実行します。

詳細情報here

+0

感謝を助けます!私が正しく理解していれば、このアプローチは現在の実装と同じですか? 各クラスは並列に実行できます。つまり、テストケースごとに新しいクラスを作成する必要があります。それは重複につながります - 同じメンバーで100500クラス。私は水平なスケールのようなものが必要です。私の質問で絵を見てください。 – burzhuy

+0

私は100500を並列に走らせても良い結果は得られないと思います。とにかく、マシン(CPU、メモリなど)とテストの種類(CPUバウンドかIOバウンドか)によって異なります。 –

+0

もちろん、私は数百の話をしています。たとえそれが100500であっても、100500テストの代わりに100500テストケースを作成するほうがはるかに高速です – burzhuy

0

いくつかの調査の後、私は同時に2つのテストを実行する方法を見つけました。

  1. Nunit + Ncrunchは(テストケースを 並列対応)に並列にテストを実行することを可能にします。しかし、私にとっては、この方法は便利ではありません。私は NcrunchのGUIが好きではなく、正確な ウェイ(長い実行テストのしきい値設定、マルチスレッド設定 など)でそれを設定する時間がかかります。また、Ncrunchは無料ではありません。
  2. Nunit + Nunit tests runner console。私はこの方法を選ぶ。これにより、 のテストを並行して実行することができます。これは無料で、設定が簡単で、コンソールから実行できる です。 1つのコンソールウィンドウで複数のテストを並行して実行するか、複数のコンソールを実行するように設定できます。
関連する問題