AgentSkillsCN

write-tests

在本项目中编写测试代码时使用。遵循表格驱动测试、Mock 对象创建以及验证视角的相关模式。

SKILL.md
--- frontmatter
name: write-tests
description: このプロジェクトでテストコードを作成する際に使用する。テーブル駆動テスト、モック作成、検証観点のパターンに従う。

テストの作成

このプロジェクトのテストはtestifyなどの外部テストフレームワークを使わず、標準のtestingパッケージをベースに書く。

テストファイルの配置

テスト対象と同じパッケージ内に配置する。ファイル名は{対象ファイル名}_test.goとする。

テスト関数の命名

  • 関数テスト: Test{関数名}
  • メソッドテスト: Test{型名}_{メソッド名}
  • 条件付き: Test{型名}{メソッド名}{条件}

テーブル駆動テスト

このプロジェクトではテーブル駆動テストを標準パターンとして使用する。テストケースにはnameフィールドで説明を記載し、t.Runでサブテストとして実行する。

モックの作成

domain/repositoryのインターフェースに対し、テストファイル内にモック構造体を定義する。モック構造体のフィールドで戻り値やエラーを制御する。呼び出し回数を検証したい場合はcalledフィールドを追加する。

HTTPサーバのモック

外部APIとの通信テストにはnet/http/httptestパッケージを使用する。テスト終了時にdefer server.Close()で確実にクリーンアップする。

テストで検証すべき観点

  • 正常系: 期待する出力が得られること
  • エラー系: 適切なエラーが返ること
  • 境界値: 空スライス、nil、ゼロ値の扱い
  • context取消: context.WithCancelで中断時の挙動
  • 並行アクセス: sync.WaitGroupで複数ゴルーチンからの同時アクセス
  • 冪等性: 同じ操作を2回実行しても問題ないこと

CIとの整合

テストはgo test -race ./...で実行される。データ競合が検出されないよう、共有状態へのアクセスにはsync.Mutexなどで保護する。