2017-08-17 10 views
0

NUnit 3.8.0.0、.NET 4.0、およびC#を使用して、パラメータ化されたフィクスチャとメソッドによるテスト並列化に関する質問があります。Fixtureを実行していても並列ではないメソッドNUnit

私は現在、一連のリソース内の各リソースを使用してテストを実行するテストスイートを開発中です。これらのリソースを初期化するのはかなり時間がかかり、リソースは状態を保持しないため、テストケース間でリソースを共有してパフォーマンスを向上させたいと考えています。これらのリソースは複数のテストで同時にを使用することはできません。

これを行うために、私はconstuctorを1つの引数で取ってベースフィクスチャを作って、フィクスチャが正しいリソースを指し示すようにしました。実際のテストフィクスチャはこのフィクスチャのサブクラスです。

私はconstuctor引数(基本クラスに渡される)とテストケース引数の両方を使用するテストフィクスチャを持っています。このパラメータに基づいて、基本クラスはいくつかのリソースを初期化します。これらのリソースは同時に使用することはできません。

これらのテストケースをクラスMyParameterizedTestFixture(V1),MyParameterizedTestFixture(V2)によって生成された異なるフィクスチャのテストで並列化しようとしています。同時に実行することはできますが、同じフィクスチャでのテストは(リソースが同時に使用できないため)実行できません。さらに、異なるフィクスチャクラス may が並行して実行されます。

私のコードは、(抽象化の詳細が)次のようになります。

[TestFixture] 
[TestFixtureSource(typeof(TestData), "FixtureParams")] 
public class MyParameterizedTestFixture : BaseFixture 
{ 
    public MyParameterizedTestFixture(Resource resource) : base (resource) { } 

    [Test] 
    public void Test1() { /* run test using Resource */ } 

    [TestCaseSource("Params")] 
    public void TestParameterized(object param) { /* run test using Resource and param */ } 
} 

私は私の派生備品にParallelizable(ParallelScope.Self)]を追加しようとしましたが、同じリソースを(使用して、異なる器具からのテストの結果はすなわち、同じを持つことversion)fixtureパラメータは、同時に実行されます(1つのフィクスチャを選択するだけで動作します)。

[Parallelizable(ParallelScope.Fixture)]を使用すると、違うフィクスチャが一緒に実行されるため、間違いがあります。 [Parallelizable(ParallelScope.Children)]を使用しても、同じクラスの異なるフィクスチャではなく、フィクスチャで異なるテストケースが一緒に実行されるため、正しくありません。

私は、階層化されたアプローチ(何らかの方法で並列化可能なフィクスチャーと別の方法でのマーキング)を使用してアーカイブするか、カスタムパラレルスコープを定義することができますか?

答えて

0

NUnitを使用すると、任意のフィクスチャを並列に実行するかどうかを決めることができます。治具を平行して実行する場合、他の平行治具と同時に実行することができます。他の備品と一緒に実行することは可能ですが、他の備品では実行できないフィーチャをグループ化する方法は素晴らしい機能ですが、今のところはありません

同じフィクスチャの複数のインスタンスこれらのインスタンスは、すべてのフィクスチャを処理するのとまったく同じ方法で処理されます。つまり、什器が並列化可能である場合、インスタンスは、他のインスタンスのいずれかと異なる什器のインスタンスと同時に実行されてもよい。

同様に、テストケース(メソッド)を並列に実行することも、実行しないこともできます。パラレルケースが非平行のフィクスチャに含まれている場合、そのフィクスチャの他のメソッドと並行して実行されます。パラレル・フィクスチャに含まれている場合は、他のパラレル・メソッドと同時に実行できます。

つまり、私たちが現在持っている機能では、並列性は、スイート、フィクスチャまたはテストケースのいずれの場合でも、基本的に各テストごとにすべてまたは何もありません。これは、将来のリリースの拡張で変更される可能性があります。

関連する問題