ユーザーアイコン

mizuko

4日前

0
0

Go言語での振る舞い駆動テストの実装パターン

Go
テスト
testify

振る舞い駆動のテスト(Behavior-Driven Testing)は、実装の詳細ではなくシステムの振る舞いに焦点を当てたテスト手法。

特徴

AAAパターンの採用

// Arrange(準備) input := request.PostMemoCreateRequest{...} memo := fixtures.NewMemo().Build() expect.MemoCreate(suite.mocks, memo, categories) // Act(実行) result, err := suite.interactor.Create(suite.ctx, userID, input) // Assert(検証) suite.NoError(err) suite.True(result)

ビジネス要件の表現

テスト名でビジネス要件を明確に表現する:

  • "正常系: カテゴリ付きメモの作成"
  • "異常系: 存在しないメモの削除"

実装テスト vs 振る舞いテスト

❌ アンチパターン(実装テスト):

  • SQL文の検証
  • 内部メソッドの呼び出し順序の検証
  • 実装の詳細に依存

✅ 推奨パターン(振る舞いテスト):

  • ビジネス要件の検証
  • 期待される結果の確認
  • リファクタリング耐性が高い

メリット

  1. リファクタリング耐性: 内部実装を変更してもテストが壊れない
  2. ドキュメント価値: テストが仕様書として機能
  3. ビジネス価値に焦点: プロダクトオーナーも理解可能
  4. 保守性: 変更に強く、長期的に価値を提供