首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Visual Studio 2008 單元測試完整指南:從測試存根生成到 TDD 最佳實踐

     編輯:關於.NET

Team Test 核心功能

  • 測試方法存根自動生成 (右鍵類別/方法 → 「建立單元測試」)
  • IDE 內整合執行與管理
  • 資料驅動測試:資料庫/CSV/XML 多源支援
  • 程式碼涵蓋率分析 (僅 Team Suite/Team Edition)
  • 私有方法測試支援 (透過反射產生 Proxy)

測試專案架構規範

  1. 測試程式碼獨立專案,參考 Microsoft.VisualStudio.QualityTools.UnitTestFramework 與被測專案
  2. 每個目標類別對應一個測試類別 ([TestClass]),單一 .cs 檔
  3. 每個目標方法對應一個測試方法 ([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 版)

  1. 「測試」→「編輯測試執行組態」→選擇組態
  2. 勾選欲分析組件 → 重新執行測試
  3. 紅色標記未涵蓋程式碼,綠色標記已涵蓋
  4. 紅色區塊揭露違反 TDD 原則之處 (先寫實作後寫測試)

資料驅動測試實作

  1. 專案加入「本地資料庫」或「以服務為基礎的資料庫」
  2. 伺服器總管建立測試資料表 (含輸入欄位與預期結果欄位)
  3. 「測試檢視」→ 選取測試 → 屬性 → 設定 DataConnectionString 與 DataTableName
  4. IDE 自動注入 [DataSource]、[DataTableName] 屬性
  5. 測試方法透過 TestContext.DataRow 存取當前資料列
  6. 框架自動遍歷資料表每一列執行測試

TDD 實踐心法與最佳實踐

  1. 紅-綠-重構:先寫失敗測試 → 寫最小實作通過 → 重構優化
  2. 測試獨立性:無執行順序相依、無環境相依 (路徑、設定檔)
  3. 每個產品類別對應一個測試類別
  4. 新增測試前確保現有測試全綠
  5. 手工測試為最後手段,優先自動化
  6. 命名慣例:MethodName_Scenario_ExpectedBehavior
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved