DependsOnAttribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
宣告一個測試(或每個測試類別的測試)必須在一個或多個其他測試完成前開始,形成一個依賴圖,由組譯內排程器依拓撲順序執行。 與平面排序屬性不同,圖的獨立分支仍會平行運行。
[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() { }
}
備註
屬性宣告一條邊「此測試依賴於該測試」。 多次應用是測試宣告多於一個先修條件(fan-in)的方式;多個標示相同前提的測試就是圖形如何散開。Fan-out 是此功能的重點:一旦共享前置條件通過,所有受扶養人同時可執行,排程器可同時執行,視工作者可用性而定 ParallelizeAttribute 。
當這個依賴性應用到一個類別時,會套用到該類別中的每個測試。 當目標是 型別 (而非特定方法)時,邊會指向該型別 的每個 測試,因此依賴項只會在所有測試結束後才開始。
範圍。 依賴性會在單一測試來源中解決。 另一個組件中的目標無法被等待,儘管 DependsOnAttribute(Type) 且 DependsOnAttribute(Type, String) 會欣然接受該組件的型別:此類邊不匹配,且會被報告為忽略依賴,而非靜默排序。
失敗語義。 若先置條件未通過,依賴項會被 跳過而非失敗,跳躍會以傳遞方式向下傳遞。 跳過是既定慣例(TestNG、 dependsOnMethodsTUnit、 [DependsOn]pytest 依賴),它保持訊號可讀性:一個根本原因被報告為一次故障加上一組明確標示的跳過,而非一堵故障牆。
ProceedOnFailure設定為true必須執行的受扶養人——通常是稽核或清理測試。
週期。 相依週期是一種設定錯誤,會在組裝過程中進行任何測試前報告。 循環中的每個測試都會失敗,並會收到指定循環路徑的訊息。
與平行化的互動。 排序會被強制執行,不論 。Scope 在 ClassLevel (預設情況下)排程單元為整個類別,因此兩個類別間的依賴在類別細度上被尊重; 同一類別的兩個方法 之間的依賴性會在該類別的執行中排序它們。 每個測試下 MethodLevel 都單獨排程,這能帶來最多的平行性和最細緻的排序。 如果類別層級排程需要將兩個類別接連執行(類別 A 的測試依賴類別 B 的,反之亦然),宣告的順序仍會被尊重——這些類別的測試會依依賴順序順序執行,並以警告命名它們——但它們會失去平行性;換成 MethodLevel WD 後又能恢復。
標記 DoNotParallelizeAttribute 為測試的測試在序列階段執行,該階段發生在平行階段之後。 依賴此類測試的可平行化測試因此也會被移入序列相位(傳遞性),使其前置條件真正先行完成。
數據驅動的測試。 命名一個擴展成多個測試案例(例如透過 [DataRow])的測試,會讓 所有 案例都有邊:依賴者每列等待,若有列未通過則跳過。 不支援每列匹配。
繼承。 在基底類別上宣告的測試方法會執行為每個導出測試類別的測試,且該宣告的依賴性會隨之遷移:邊會以導 出 類別解析,因此每個導出類別在兩個測試的副本之間擁有自己的邊。 將邊緣放下,會默默地丟棄每個具體考試類別中宣告的排序。
Inherited = false選擇不使用的是覆寫鏈:一種能覆蓋依賴測試且不重新宣告屬性的方法,沒有依賴性,因為將前置條件重新指向作者重寫的方法,往往會產生沒有人要求的邊。
測試相依會將測試結合在一起,使得孤立執行依賴項變得不可能,因此它們不太適合單元測試。 它們適用於多步驟整合與端對端套件,因為在每個測試中重新建立昂貴狀態是不切實際的。
建構函式
| 名稱 | Description |
|---|---|
| DependsOnAttribute(String) |
初始化該類別的新實例 DependsOnAttribute ,宣告依賴同一測試類別的另一個測試方法。 |
| DependsOnAttribute(Type, String) |
初始化一個新的類別實例 DependsOnAttribute ,宣告對另一個測試類別的特定測試方法的依賴。 |
| DependsOnAttribute(Type) |
初始化一個新的類別實例 DependsOnAttribute ,宣告對另一個測試類別 的每個 測試都具有依賴性。 |
屬性
| 名稱 | Description |
|---|---|
| ProceedOnFailure |
取得或設定一個值,表示當前置條件未通過時,依賴者是否仍在執行。 預設為 |
| TestClass |
取得宣告前置條件的測試類別,或 |
| TestMethodName |
取得前置測試方法的名稱,或 |