測試驅動開發(Test Driven Development,TDD)是一種先編寫單元測試,再編寫實際代碼以通過測試的開發方法。單元測試可視為系統行為的微型規格,先行撰寫測試能引導開發者僅編寫足夠通過測試的代碼,確保系統精簡、輕量且專注於既定需求。
TDD 的核心節奏是「紅燈、綠燈、重構」:紅燈代表測試失敗(尚未實作代碼),綠燈代表編寫最少量代碼使測試通過,重構則在測試保護下優化代碼結構。此循環在開發過程中不斷重複。
注意:本實驗旨在展示 Visual Studio 2010 對 TDD 的工具支援,而非教授 TDD 方法論。若想深入了解 TDD,建議參閱《Test Driven Development in Microsoft .NET》(James Newkirk、Alexei Voronstov 著)及《Pragmatic Unit Testing in C# with NUnit》(Andy Hunt 等著)。
高效的 TDD 節奏仰賴正確的思維與工具。Visual Studio 2010 引入多項增強功能,協助開發者減少按鍵次數、加速方案導航,並支援替換測試框架。接下來將以「測試優先」方式實作一個堆疊類別,示範如何利用測試驅動設計與實作。
以系統管理員權限執行 CheckDependencies.cmd 啟動 Configuration Wizard,安裝缺失的先決條件並完成精靈。該腳本同時會安裝本實驗所需的 Visual Studio 代碼片段。
預估完成時間:60 分鐘。本實驗同時提供 C# 與 VB.NET 範例,截圖以 C# 為主,VB.NET 操作類似。
SimpleDataStructures,勾選「建立解決方案目錄」。Class1.cs(或 Class1.vb)。
SimpleDataStructures.Tests。UnitTest1.cs。
SimpleStackTests。
public 並加上 [TestClass] 屬性。Visual Studio 會提示缺少 using Microsoft.VisualStudio.TestTools.UnitTesting;,按 Ctrl+. 使用智能標記自動添加。
WhenAStackIsCreated,以清晰表達測試上下文(堆疊建立時的預設狀態)。ThenItShouldBeEmpty,驗證新建堆疊的 IsEmpty 屬性為 true。SimpleStack,此時類別尚不存在。按 Ctrl+. 選擇「Generate class for 'SimpleStack'」,VS 會在測試專案中產生存根類別。
提示:智能標記的「Generate other...」選項可自訂生成位置。TDD 實踐者傾向於最後才決定代碼所屬組件,以延後設計決策並掌控依賴關係。本實驗中我們稍後會將
SimpleStack移至主專案。
Assert.IsTrue(theStack.IsEmpty);。再次觸發智能標記為 IsEmpty 生成屬性存根。
SimpleStack 中的 IsEmpty 為唯讀屬性並直接回傳 true(最簡實作)。
ThenShouldBeAbleToPushAnItemOntoTheStack,呼叫尚不存在的 Push 方法。Push 方法存根,執行測試確認失敗(紅燈)。
Push 方法本體清空(移除 NotImplementedException),測試即轉綠。雖然此時 Push 無實際作用,但符合「最簡實作」原則。TSBA)快速定位測試方法。
SimpleDataStructures.sln(位於 %TrainingKitInstallFolder%\Labs\TestDrivenDevelopment\Source\Ex02-Refactor\begin\)。ThenShouldBeAbleToPushAnItemOntoTheStack,加入斷言 Assert.IsFalse(theStack.IsEmpty); 驗證推入元素後堆疊不為空。執行測試 — 失敗,因 IsEmpty 仍固定回傳 true。SimpleStack:引入 ArrayList _items 儲存狀態,IsEmpty 檢查 _items.Count == 0,Push 將元素加入列表。別忘記初始化 _items(建構函式中 new ArrayList()),並透過智能標記匯入 System.Collections。
Push 存入的是常數 0,需進一步完善。
ThenShouldBeAbleToPushAndPopAnItemFromTheStack,驗證推入後彈出的元素正確。智能標記生成 Pop 方法存根(VS 自動推斷回傳型別為 int)。
Pop 從列表取出並移除首個元素,修正 Push 存入實際參數值。三個測試全數通過。SimpleStack.cs 從測試專案剪下,貼上至主專案 SimpleDataStructures。
SimpleDataStructures,將類別與 Push、Pop 方法改為 public。
本實驗展示了 Visual Studio 2010 針對 TDD 工作流的多項 IDE 增強:智能標記自動生成存根、Quick Search 极速導航、測試執行器整合等。這些工具讓開發者能專注於「紅-綠-重構」節奏,以最簡代碼滿足測試,進而構建緊湊、高品質的軟體。若您初接觸 TDD,期望此實驗能為您打開一扇通往敏捷開發實踐的大門。