大規模なGoプロジェクトでテストヘルパーを効果的に整理する方法。ドメイン駆動設計に基づいた構造化。
ディレクトリ構造
test/
├── helper/
│ ├── mock/
│ │ └── setup.go # モック初期化
│ ├── expect/ # ドメイン別期待値設定
│ │ ├── memo.go
│ │ ├── note.go
│ │ ├── category.go
│ │ ├── user.go
│ │ └── common.go
│ ├── fixtures/ # テストデータ生成
│ │ ├── memo.go
│ │ ├── user.go
│ │ └── category.go
│ └── context/
│ └── auth.go # 認証コンテキスト
└── mocks/ # 自動生成モック
ヘルパー関数の設計原則
1. Builder パターンでのフィクスチャ
memo := fixtures.NewMemo().
WithUserID(1).
WithTitle("Test").
Public().
Build()
2. ドメイン別の期待値設定
// ドメインごとにファイルを分離
expect.MemoCreate(mocks, memo, categories)
expect.UserFind(mocks, userID, user)
3. モックセットの一元管理
type Set struct {
Memo *mocks.MockMemoRepository
Category *mocks.MockCategoryRepository
// ... 全モックを集約
}
メリット
- 関心事の分離: 各ドメインの設定が独立
- 再利用性: 共通処理をヘルパーに集約
- 保守性: 新機能追加時の拡張が容易
- 可読性: テストコードがシンプルに