Team Test 核心功能
- 測試方法存根自動生成 (右鍵類別/方法 → 「建立單元測試」)
- IDE 內整合執行與管理
- 資料驅動測試:資料庫/CSV/XML 多源支援
- 程式碼涵蓋率分析 (僅 Team Suite/Team Edition)
- 私有方法測試支援 (透過反射產生 Proxy)
測試專案架構規範
- 測試程式碼獨立專案,參考
Microsoft.VisualStudio.QualityTools.UnitTestFramework 與被測專案
- 每個目標類別對應一個測試類別 (
[TestClass]),單一 .cs 檔
- 每個目標方法對應一個測試方法 (
[TestMethod]),無參數實例方法
測試類別生命週期屬性
| 屬性 | 觸發時機 | 方法簽章 |
[ClassInitialize] | 測試類別首次執行前 | static void Method(TestContext ctx) |
[ClassCleanup] | 測試類別所有測試完成後 | static void Method() |
[TestInitialize] | 每個測試方法執行前 | void Method() |
[TestCleanup] | 每個測試方法執行後 | void Method() |
斷言與例外處理進階
Assert 核心方法
AreEqual/AreNotEqual、AreSame/AreNotSame、IsTrue/IsFalse、IsNull/IsNotNull
IsInstanceOfType、Fail、Inconclusive (未完成測試標記)
預期例外兩種模式
// 模式一:屬性聲明 (簡單場景)
[ExpectedException(typeof(ArgumentException), "userId 不可為 null")]
public void TestNullUserId() { ... }
// 模式二:Try-Catch 手工驗證 (複雜場景)
try { target.Method(null); }
catch (Exception ex) {
Assert.IsNotNull(ex, "預期例外未拋出");
Assert.AreEqual(typeof(ArgumentException), ex.GetType(), "例外型別不符");
}
測試執行與結果分析
- 「測試清單編輯器」篩選執行子集
- 游標位置決定執行範圍:方法內→單一測試;類別層級→全類別測試
- 測試結果視窗:歷史記錄、分組依據 (結果/類別/持續時間)、自訂快速搜尋
- 「開啟測試」快速定位失敗原始碼
- 選擇性重跑失敗測試
- 執行時間對比作為效能調優基準
程式碼涵蓋率 (僅 Team 版)
- 「測試」→「編輯測試執行組態」→選擇組態
- 勾選欲分析組件 → 重新執行測試
- 紅色標記未涵蓋程式碼,綠色標記已涵蓋
- 紅色區塊揭露違反 TDD 原則之處 (先寫實作後寫測試)
資料驅動測試實作
- 專案加入「本地資料庫」或「以服務為基礎的資料庫」
- 伺服器總管建立測試資料表 (含輸入欄位與預期結果欄位)
- 「測試檢視」→ 選取測試 → 屬性 → 設定
DataConnectionString 與 DataTableName
- IDE 自動注入
[DataSource]、[DataTableName] 屬性
- 測試方法透過
TestContext.DataRow 存取當前資料列
- 框架自動遍歷資料表每一列執行測試
TDD 實踐心法與最佳實踐
- 紅-綠-重構:先寫失敗測試 → 寫最小實作通過 → 重構優化
- 測試獨立性:無執行順序相依、無環境相依 (路徑、設定檔)
- 每個產品類別對應一個測試類別
- 新增測試前確保現有測試全綠
- 手工測試為最後手段,優先自動化
- 命名慣例:
MethodName_Scenario_ExpectedBehavior