# Write Tests

> このプロジェクトでテストコードを作成する際に使用する。テーブル駆動テスト、モック作成、検証観点のパターンに従う。 Use when this capability is needed.

- Skill: `tomevault-io/write-tests-10` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/write-tests-10`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/write-tests-10/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/write-tests-10

---


# テストの作成

このプロジェクトのテストは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などで保護する。

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/cat5neko) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

