exunit-code-review について
Elixir チーム向けの ExUnit テストコードレビューガイドです。テスト構成、外部境界のモック、テストアダプター、データベース分離を扱い、ファイルと行番号の根拠を求める確認手順も定めています。
主な機能
- 01非同期テストとテスト構成の確認
- 02外部境界に限定した Mox の使用
- 03Bypass、Swoosh、Oban のテストアダプター確認
- 04Ecto sandbox によるデータベース分離の確認
- 05順序立てた検証と行番号の提示
活用シーン
- 01ExUnit テストモジュールのレビュー
- 02外部依存関係をモックする必要性の判断
- 03非同期テストとデータベース共有状態の確認
- 04ファイルと行番号の根拠を添えたレビュー指摘の提出
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill exunit-code-reviewインストール後、Claude Code で/exunit-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/exunit-patterns.mdintegration-tests.mdmox-boundaries.mdtest-adapters.md詳細
ExUnit コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| 非同期テスト、セットアップ、describe、タグ | references/exunit-patterns.md |
| ビヘイビアベースのモック、期待値 | references/mox-boundaries.md |
| Bypass、Swoosh、Oban のテスト | references/test-adapters.md |
| モックと実物の使い分け、Ecto サンドボックス | references/integration-tests.md |
モック境界の考え方
外部との境界でモックします:
- HTTP クライアント、外部 API、サードパーティサービス
- 低速なリソース:ファイルシステム、メール、ジョブキュー
- 非決定的なもの:DateTime.utc_now()、:rand
内部コードはモックしないでください:
- コンテキスト、スキーマ、GenServer
- 内部モジュール、PubSub
- 自分で作成したものすべて
レビューチェックリスト
テスト構造
- データベースの状態を共有する場合を除き、テストは
async: trueになっている - 関連するテストが describe ブロックでグループ化されている
- 共通のテストデータがセットアップで抽出されている
- テストが明確な準備/実行/検証の構造になっている
モック
- 外部との境界(HTTP、API)に Mox を使用している
- モック可能なインターフェースに対してビヘイビアを定義している
- 内部モジュールをモックしていない
- 厳密なモックのため、セットアップで verify_on_exit! を使用している
テストアダプター
- HTTP エンドポイントのモックに Bypass を使用している
- メールのテストに Swoosh.TestAdapter を使用している
- バックグラウンドジョブのアサーションに Oban.Testing を使用している
データベース
- 分離に Ecto.Adapters.SQL.Sandbox を使用している
- 非同期テストでデータベースの状態を共有していない
- フィクスチャ/ファクトリーを一貫して使用している
有効なパターン(指摘しないでください)
- 単体テストではモックを使い、統合テストでは実物を使う - テストレベルによって必要なものは異なります
- 統合テストでデータベースをモックしない - データベースは内部のものです
- 簡単なテストデータをインラインで記述する - すべてにファクトリーが必要なわけではありません
- 公開 API 経由でプライベート関数をテストする - 適切な方法です
コンテキスト依存のルール
| 問題 | 次の場合にのみ指摘 |
|---|---|
| 非同期ではない | テストで実際に共有状態が必要な場合 |
| モックがない | 外部呼び出しがあり、かつモック/Bypass がない場合 |
| 内部のものをモックしている | モック対象のモジュールが内部コードである場合 |
ゲート(順番)
順番どおりに完了してください。該当する問題について、前のステップに合格するまで指摘を出さないでください。
-
ファイル内の証拠 — テストモジュール(またはヘルパー)を開き、具体的な行に照らして主張を確認します。
- 合格条件: 指摘候補ごとに
[FILE:LINE]と、その行(または明示した隣接行)の内容を示す事実に基づいた一行の説明が含まれていること。一般的なスタイル上の不満では不十分です。
- 合格条件: 指摘候補ごとに
-
ExUnit の誤検知に対する拒否判定 — このスキルの有効なパターンとコンテキスト依存のルールで該当ケースを確認します。
- 合格条件: 「指摘しないでください/次の場合にのみ指摘」の対象外であることを一文で説明できるか、指摘を取り下げること。
-
プロトコル横断の検証 — review-verification-protocol を適用し(例:「未使用」と指摘する前に関数/ブロック全体を読み、使用箇所を検索する)、同じ指摘を検証します。
- 合格条件: 主張の種類に関連するプロトコルチェックを少なくとも一つ満たし、異議を受けた場合にその根拠として提示できること。
指摘を提出する前に
**ゲート(順番)**とリンク先のプロトコルを満たしたうえで、指摘ごとに [FILE:LINE] ISSUE_TITLE を使用してください。
コメント
Markdown 対応