Complete implementation guide for the Test Data Builder Pattern. Use when you need to create maintainable test data or simplify test setup for complex objects. Covers fluent interfaces, semantic factory methods, default value design, and Builder composition patterns. Keywords: test data builder, builder pattern for tests, object mother, fluent interface, UserBuilder, ProductBuilder, .With(), .Build(), AUser(), test data preparation, complex object construction, semantic testing
Test Data Builder Pattern 是 Object Mother Pattern 的改良版,主要解決以下問題:
// ❌ 問題:過多參數設定,測試意圖不明確
var user = new User
{
Name = "John Doe", Email = "john@example.com", Age = 30,
Roles = new[] { "User" }, Settings = new UserSettings { Theme = "Dark", Language = "zh-TW" },
IsActive = true, CreatedAt = DateTime.Now, ModifiedAt = DateTime.Now
};
// ✅ 改善:意圖明確,只設定測試關注的屬性
var user = UserBuilder.AUser().WithName("John Doe").WithValidEmail().Build();
一個標準的 Test Data Builder 應包含:
With* 方法鏈來設定屬性AnAdminUser()、ARegularUser())涵蓋完整 UserBuilder 實作(預設值、With* 流暢方法、語意化靜態工廠方法、Build 方法)、單一測試情境與配合 Theory 使用的範例。
完整 Builder 實作與測試使用範例請參考 references/builder-implementation.md
涵蓋五項實踐:提供合理的預設值、使用語意化命名(UserScenarios)、Builder 之間的組合(OrderBuilder 組合 UserBuilder + ProductBuilder)、避免過度複雜化、統一管理測試資料(TestData 靜態類別)。
完整最佳實踐與進階模式請參考 references/best-practices-and-patterns.md
| 特性 | Test Data Builder | Object Mother | | -------- | --------------------------- | --------------------- | | 彈性 | 高度彈性,可針對測試調整 | 固定的測試資料 | | 可讀性 | 流暢介面,意圖明確 | 需要查看方法實作 | | 維護性 | 集中管理,易於修改 | 變更影響所有測試 | | 使用場景 | 單元測試、情境測試 | 簡單的整合測試 |
| 特性 | Test Data Builder | AutoFixture | | ---------- | ----------------------- | ------------------------- | | 控制度 | 完全控制物件建立 | 自動產生,控制度較低 | | 設定複雜度 | 需手動建立 Builder | 幾乎零設定 | | 測試意圖 | 非常明確 | 需額外說明 | | 適用時機 | 需要精確控制的測試 | 大量資料產生、匿名測試 |
建議:Test Data Builder 和 AutoFixture 可以相輔相成。簡單情境使用 AutoFixture,複雜情境或需明確意圖時使用 Builder Pattern。
請參考 templates/ 目錄下的完整實作範例:
user-builder-example.cs - 基本 User Builder 實作advanced-builder-scenarios.cs - 進階 Builder 組合與使用情境builder-with-theory.cs - Builder 配合 xUnit Theory 的實務範例UserBuilder.cs、ProductBuilder.cs),放置於測試專案的 Builders/ 目錄With* 流暢方法、語意化靜態工廠方法與 Build() 方法TestData.cs 靜態類別集中管理常用測試資料*Tests.cs),示範 Builder 的使用方式本技能內容提煉自「老派軟體工程師的測試修練 - 30 天挑戰」系列文章:
autofixture-basics - 使用 AutoFixture 自動產生測試資料xunit-project-setup - xUnit 測試專案的基礎設定test-naming-conventions - 測試命名規範Test Data Builder Pattern 是撰寫可維護測試的重要技巧:
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer