用途:Test Data Builder Pattern 是 Object Mother Pattern 的改良版,用於在單元測試與情境測試中建立可維護的測試資料,解決固定測試資料難以調整、測試意圖不明確、物件建立邏輯重複等問題。
主要能力:標準 Builder 包含四部分——為必要屬性提供合理預設值、以 With* 方法鏈構成的流暢介面、語意化靜態工廠方法(如 AnAdminUser()、ARegularUser())、以及最終回傳目標物件的 Build() 方法。可搭配 xUnit Theory 使用,並支援 Builder 之間的組合(如 OrderBuilder 組合 UserBuilder 與 ProductBuilder)。
使用方式:以 UserBuilder.AUser().WithName("John Doe").WithValidEmail().Build() 取代直接 new 物件並逐一設定屬性,使測試只設定關注的屬性、意圖更明確。輸出時產生 Builder 類別檔案(如 UserBuilder.cs、ProductBuilder.cs)置於測試專案 Builders/ 目錄;若需跨測試共用,產生 TestData.cs 靜態類別集中管理常用測試資料,並產生對應的 *Tests.cs 示範用法。
適用場景:測試物件有多個屬性、需重複使用測試資料、希望表達清晰意圖時。與 Object Mother 相比彈性與可讀性更高;與 AutoFixture 相比控制度更高但需手動建立 Builder,兩者可相輔相成——簡單情境用 AutoFixture,複雜或需明確意圖時用 Builder Pattern。
限制與注意事項:應保持 Builder 簡單、提供合理預設值、使用語意化方法名稱,避免過度複雜化。完整 Builder 實作、最佳實踐與進階模式、實戰範例分別見 references/builder-implementation.md、references/best-practices-and-patterns.md 與 templates/ 目錄下的 user-builder-example.cs、advanced-builder-scenarios.cs、builder-with-theory.cs。相關技能包括 autofixture-basics、xunit-project-setup、test-naming-conventions。