Language

DoNotParallelizeAttribute クラス

定義

アセンブリ内の並列化からテスト、テスト クラス、またはテスト アセンブリを除外します。 影響を受けるテストは、同じテスト ソース内の他のテストと同時に実行されることは決してありません。並列化が有効になっている場合、そのソース内のすべての並列化可能なテストが完了した後に順番に実行されるように遅延されます。

public ref class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)]
public class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)]
public class DoNotParallelizeAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)>]
type DoNotParallelizeAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)>]
type DoNotParallelizeAttribute = class
    inherit Attribute
Public Class DoNotParallelizeAttribute
Inherits Attribute
継承
DoNotParallelizeAttribute
属性

注釈

属性は一度に 2 つの保証を提供し、2 つ目は見落としやすいです。

相互除外。 この属性を直接、またはそのクラスまたはそのアセンブリを介して実行されるテストは、同じソース内の他のテストと同時に実行されることはありません。 単独で実行されます。

遅延。 アセンブリ内並列処理が有効になっている場合、スケジューラはソースのテストを並列化可能セットと非並列化可能セットに分割します。 最初に並列化可能セット全体を完了し、その後、そのソースの実行の最後に並列化できないセット (一度に 1 つのテスト) を実行します。 パーティション分割はテスト ソース (アセンブリ) ごとに行われるため、"最後に実行" と "単独で実行" は、同じソース内の他のテストに対して相対的に保証されます。複数のソースにまたがる実行には、それぞれに個別の遅延テールがあります。

これにより、属性のコストを過小評価しやすくなります。 遅延テストは、同じソース内の他のテストと重複できないため、その期間は、並行して行われる並列作業に吸収されるのではなく、そのソースのクリティカル パスに 追加されます 。 したがって、この属性を含む単一の低速テストは、ソース内で不均衡なコストがかかります。ソース内の他のテストと並行して実行されることの上に、ソースの実行時間がほぼ独自の期間長くなります。 (別のホストで実行される可能性がある 他 のソースからのテストと重複する可能性があるため、このコストは、必ずしも実行全体ではなく、ソースのクリティカル パスにかかっています)。

遅延テストは並列化可能なセットが完了した後にのみ実行されるため、並列化可能なフェーズ中にキャンセルまたは中止された実行は、"最後の実行" と "実行が早く取り消されたときにまったく実行されない可能性があります" のいずれも実行せずに完了できます。

並列化がオフの場合は効果がありません。 MSTest は既定では並列化されません。アセンブリ内並列処理は、 ParallelizeAttribute ([assembly: Parallelize])、同等の実行設定、または MSTestParallelizeScope / MSTestParallelizeWorkers MSBuild プロパティを使用してオプトインされます。 並列化が有効になっていない場合、すべてのテストは既に順番に実行されるため、この属性は不活性です。オプトアウトするものはありません。

属性は、次の 3 つのレベルで適用できます。

  • アセンブリ — アセンブリ内のすべてのテストは並列化から除外されます。これは、そのアセンブリの並列化を無効にすることと同じです。
  • クラス — クラス 内のすべてのテストは除外されます。クラスのテストは遅延フェーズで順番に実行されます。
  • メソッド — 注釈付きテストのみが除外され、遅延されます。クラスの残りの部分は引き続き並列で実行できます。

これは粗いコントロールです。並列処理から完全にテストを選択します。 特定の共有リソースのみが優先される場合は、 ResourceLockAttributeを優先します。これは、並列化からそれらを完全に除外するのではなく、同じリソースを宣言するテストのみをシリアル化します。 テストに両方の属性が含まれている場合、 DoNotParallelizeAttribute が優先され、宣言されたリソース ロックは影響を与えません。このようなテストはシーケンシャル フェーズで実行され、ロックを取得する並列スケジューラを通過することはありません。

コンストラクター

名前 説明
DoNotParallelizeAttribute()

アセンブリ内の並列化からテスト、テスト クラス、またはテスト アセンブリを除外します。 影響を受けるテストは、同じテスト ソース内の他のテストと同時に実行されることは決してありません。並列化が有効になっている場合、そのソース内のすべての並列化可能なテストが完了した後に順番に実行されるように遅延されます。

適用対象