ユーザーアイコン

mizuko

4日前

0
0

Goプロジェクトでのテストヘルパー関数の整理方法

Go
mockery
テスト
testify

大規模な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 // ... 全モックを集約 }

メリット

  • 関心事の分離: 各ドメインの設定が独立
  • 再利用性: 共通処理をヘルパーに集約
  • 保守性: 新機能追加時の拡張が容易
  • 可読性: テストコードがシンプルに