單元測試架構
更新:2007 年 11 月
單元測試架構可以支援 Visual Studio 中的單元測試。當您撰寫單元測試時,請使用 Microsoft.VisualStudio.TestTools.UnitTesting 命名空間中的類別 (Class) 和成員。不論從頭開始撰寫單元測試,或是修改從測試之程式碼所產生的單元測試時,都可以使用這些類別和成員。
項目群組
為了協助提供單元測試架構更清楚的概觀,本章節會將 UnitTesting 命名空間的項目以相關功能進行分組。
注意事項: |
---|
屬性 (Attribute) 項目 (以 Attribute 字串結束) 可以選擇是否搭配 Attribute 字串使用。例如,下列兩行程式碼具有完全相同的作用: [TestClass()] [TestClassAttribute()] |
用於資料導向測試的項目
請使用下列項目設定資料導向單元測試。如需詳細資訊,請參閱為資料驅動的單元測試編碼和 HOW TO:設定資料驅動的單元測試。
用於建立呼叫順序的屬性
附有以下列屬性 (Attribute) 之一的程式碼項目,會在您所指定的時刻遭到呼叫。如需詳細資訊,請參閱單元測試的結構。
針對組件
在組件 (Assembly) 載入之後和卸載之前,都會立即呼叫 AssemblyInitialize 和 AssemblyCleanup。
AssemblyCleanupAttribute
針對類別
在類別載入之後和卸載之前,都會立即呼叫 ClassInitialize 和 ClassCleanup。
ClassInitializeAttribute
針對測試方法
TestCleanupAttribute
用來識別測試類別和方法的屬性
每個測試類別都必須具有 TestClass 屬性 (Attribute),而且每個測試方法都必須具有 TestMethod 屬性 (Attribute)。如需詳細資訊,請參閱單元測試的結構。
Assert 類別和相關的例外狀況
單元測試可以使用各種 Assert 陳述式、例外狀況和屬性 (Attribute),確認特定的應用程式行為。如需詳細資訊,請參閱使用 Assert 類別。
TestContext 類別
測試內容類別的屬性 (Property) 會儲存關於目前測試回合的資訊。例如,TestContext.DataRow 和 TestContext.DataConnection 屬性便包含資料導向單元測試之測試所使用的資訊。
TestContext
用於識別和排序測試的屬性
下列屬性 (Attribute) 及指派給這些屬性 (Attribute) 的值,都會出現在 Visual Studio 的 [屬性] 視窗中,做為進行特定測試的方法。
這些屬性 (Attribute) 並不表示要由單元測試的程式碼進行存取,而是要影響使用或執行單元測試的方式 (可能透過 Visual Studio 的 IDE 進行,或是由 Team System 測試引擎進行)。
例如,這些屬性 (Attribute) 中有一部分會顯示成測試清單管理員和 [測試結果] 視窗中的資料行,這表示您可以使用這些屬性來分組及排序測試和測試結果。
TestPropertyAttribute 就是這樣的一種屬性 (Attribute),可以用來將任意的中繼資料加入至單元測試,例如,以 [TestProperty("TestPass", "Accessibility")] 標記單元測試,即可使用此屬性儲存這項測試所涵蓋之成功測試的名稱,而 [TestProperty("TestKind", "Localization")] 則可以用來儲存測試種類的指示器 (Indicator)。使用這個屬性 (Attribute) 所建立的屬性 (Property),以及您所指派的屬性值 (Property Value),都會在 Visual Studio [屬性] 視窗的 [測試專屬] 標題下出現。
測試組態類別
用於產生報告的屬性
本節中的屬性 (Attribute),會使其所附加的測試方法,與 Team Foundation Server Team 專案之專案階層架構中的實體 (Entity) 相關。如需詳細資訊,請參閱 HOW TO:啟用測試結果的報告功能。
CssIterationAttribute
以私用存取子使用的類別
如 HOW TO:測試私用方法 所說明,您可以產生私用方法的單元測試。這項產生作業會建立一個私用存取子類別,該類別則會具現化 (Instantiate) PrivateObject 類別的物件。PrivateObject 類別是一種包裝函式類別 (Wrapper Class),會使用反映 (Reflection) 做為私用存取子處理序的一部分。PrivateType 類別也與此相似,不過是用來呼叫私用靜態方法,而非私用執行個體方法。