Language

DependsOnAttribute クラス

定義

1 つ以上の他のテストが終了するまでテスト (またはテスト クラスのすべてのテスト) を開始しないことを宣言し、アセンブリ内スケジューラがトポロジ順に実行される依存関係グラフを形成します。 フラットな順序付け属性とは異なり、グラフの独立した分岐は引き続き並列に実行されます。

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
[System.Runtime.CompilerServices.Nullable(0)]
public sealed class DependsOnAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
public sealed class DependsOnAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)>]
[<System.Runtime.CompilerServices.Nullable(0)>]
type DependsOnAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)>]
type DependsOnAttribute = class
    inherit Attribute
Public NotInheritable Class DependsOnAttribute
Inherits Attribute
継承
DependsOnAttribute
属性

例

[TestClass]
public class CheckoutTests
{
    [TestMethod]
    public void CreateCart() { }

    // Fan-out: both of these wait for CreateCart, then may run in parallel with each other.
    [TestMethod]
    [DependsOn(nameof(CreateCart))]
    public void AddItem() { }

    [TestMethod]
    [DependsOn(nameof(CreateCart))]
    public void ApplyCoupon() { }

    // Fan-in: waits for both.
    [TestMethod]
    [DependsOn(nameof(AddItem))]
    [DependsOn(nameof(ApplyCoupon))]
    public void Checkout() { }

    // Runs even when its prerequisite failed.
    [TestMethod]
    [DependsOn(nameof(Checkout), ProceedOnFailure = true)]
    public void WriteAuditRecord() { }
}

注釈

この属性は、"このテストはそのテストに依存する" エッジを宣言します。 それを複数回適用することは、テストが複数の前提条件 (ファンイン) を宣言する方法です。同じ前提条件に名前を付けるいくつかのテストは、グラフファンの出方です。ファンアウトは機能のポイントです。共有の前提条件が満たされると、すべての依存コンポーネントが同時に実行可能になり、スケジューラは、 ParallelizeAttribute とワーカーの可用性に応じて、それらを同時に実行できます。

クラスに適用すると、依存関係はそのクラス内のすべてのテストに適用されます。 ターゲットが (特定のメソッドではなく) 型 の場合、エッジはその型 のすべての テストを指しているため、依存は、すべてが完了した 1 回だけ開始されます。

範囲。 依存関係は、1 つのテスト ソース内で解決されます。 DependsOnAttribute(Type)とDependsOnAttribute(Type, String)が 1 つの型を喜んで受け入れる場合でも、別のアセンブリ内のターゲットは待機できません。このようなエッジは何も一致しません。何かをサイレントに並べ替えるのではなく、無視された依存関係として報告されます。

エラー セマンティクス。 前提条件が満たされない場合、依存は スキップされ、失敗せず、スキップは推移的にグラフの下に伝達されます。 スキップは確立された規則 (TestNG の dependsOnMethods、TUnit の [DependsOn]、pytest-dependency) であり、シグナルを読み取り可能な状態に保ちます。1 つの根本原因は、障害の壁ではなく、1 つの障害と明確にラベル付けされたスキップのセットとして報告されます。 ProceedOnFailureを、とにかく実行する必要がある依存ファイルのtrue (通常は監査またはクリーンアップ テスト) に設定します。

サイクル。 依存関係サイクルは構成エラーであり、アセンブリ内のテストが実行される前に報告されます。 サイクル内のすべてのテストは、サイクル パスに名前を付けるメッセージで失敗します。

並列処理との対話。 順序付けは、 Scopeに関係なく適用されます。 ClassLevel (既定) では、スケジューリング ユニットはクラス全体であるため、2 つのクラス間の依存関係はクラスの粒度で受け入れられます。同じクラスの 2 つのメソッド間の依存関係により、そのクラスの実行内で順序付けられます。 MethodLevelでは、すべてのテストが個別にスケジュールされ、並列処理と最も優れた順序付けが提供されます。 クラス レベルのスケジューリングで 2 つのクラスを相互に実行する必要がある場合 (クラス A のテストはクラス B に依存し、その逆も同様)、宣言された順序は引き続き受け入れられます。これらのクラスのテストは、依存関係の順序で順番に実行され、警告の名前が付けられますが、並列処理は失われます。 MethodLevel に切り替えると元に戻ります。

DoNotParallelizeAttributeマークされたテストは、並列フェーズの後に発生するシーケンシャル フェーズで実行されます。 したがって、このようなテストに依存する並列化可能なテストは、前提条件が最初に実行されるように、順次フェーズにも (推移的に) 移動されます。

データドリブン テスト。 複数のテスト ケースに拡張するテストに名前を付ける (たとえば、 [DataRow]を使用する) と、 そのすべての ケースにエッジが作成されます。依存は行ごとに待機し、行が渡されない場合はスキップされます。 行ごとの一致はサポートされていません。

継承。 基底クラスで宣言されたテスト メソッドは、すべての派生テスト クラスのテストとして実行され、宣言した依存関係はそれに対して移動します。エッジは 派生クラスに 対して解決されるため、各派生クラスは 2 つのテストの独自のコピー間で独自のエッジを取得します。 エッジを削除すると、すべての具象テスト クラスで宣言された順序が自動的に破棄されます。 Inherited = falseがオプトアウトするのは、オーバーライド チェーンです。属性を再宣言せずに依存テストをオーバーライドするメソッドには依存関係がありません。これは、作成者が書き直したメソッドに前提条件を再ポイントすると、誰も要求されていないエッジを作成する傾向があるためです。

依存関係をテストすると、テストが結合され、依存するテストを単独で実行することは不可能になるため、単体テストに適しています。 これらは、マルチステップの統合とエンドツーエンドのスイート用に存在します。このスイートでは、すべてのテストで高価な状態を再確立することは実用的ではありません。

コンストラクター

名前 説明
DependsOnAttribute(String)

同じテスト クラスの別のテスト メソッドへの依存関係を宣言する DependsOnAttribute クラスの新しいインスタンスを初期化します。

DependsOnAttribute(Type, String)

別のテスト クラスの特定のテスト メソッドへの依存関係を宣言する DependsOnAttribute クラスの新しいインスタンスを初期化します。

DependsOnAttribute(Type)

別のテスト クラスのすべてのテストに対する依存関係を宣言するDependsOnAttribute クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
ProceedOnFailure

前提条件が満たされない場合に依存オブジェクトがまだ実行されるかどうかを示す値を取得または設定します。 既定値は false です。つまり、依存はスキップされます。 監査やクリーンアップ テストなど、前提条件の結果に関係なく実行する必要があるテストの true に設定します。順序は引き続き適用されます。

TestClass

前提条件を宣言するテスト クラスを取得するか、前提条件が依存クラスと同じクラスのメソッドである場合に null します。

TestMethodName

前提条件のテスト メソッドの名前を取得するか、依存関係がTestClassのすべてのテストを対象とする場合にnullします。

適用対象