mcpField
E
exunit-code-review

exunit-code-review

github.com/existential-birdsテスト・品質8585 回インストール11 週間前に更新
リポジトリ

exunit-code-review について

Elixir チーム向けの ExUnit テストコードレビューガイドです。テスト構成、外部境界のモック、テストアダプター、データベース分離を扱い、ファイルと行番号の根拠を求める確認手順も定めています。

主な機能

  1. 01非同期テストとテスト構成の確認
  2. 02外部境界に限定した Mox の使用
  3. 03Bypass、Swoosh、Oban のテストアダプター確認
  4. 04Ecto sandbox によるデータベース分離の確認
  5. 05順序立てた検証と行番号の提示

活用シーン

  1. 01ExUnit テストモジュールのレビュー
  2. 02外部依存関係をモックする必要性の判断
  3. 03非同期テストとデータベース共有状態の確認
  4. 04ファイルと行番号の根拠を添えたレビュー指摘の提出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/existential-birds/beagle --skill exunit-code-review

インストール後、Claude Code で/exunit-code-reviewを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
exunit-patterns.md
integration-tests.md
mox-boundaries.md
test-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 がない場合
内部のものをモックしているモック対象のモジュールが内部コードである場合

ゲート(順番)

順番どおりに完了してください。該当する問題について、前のステップに合格するまで指摘を出さないでください。

  1. ファイル内の証拠 — テストモジュール(またはヘルパー)を開き、具体的な行に照らして主張を確認します。

    • 合格条件: 指摘候補ごとに [FILE:LINE] と、その行(または明示した隣接行)の内容を示す事実に基づいた一行の説明が含まれていること。一般的なスタイル上の不満では不十分です。
  2. ExUnit の誤検知に対する拒否判定 — このスキルの有効なパターンとコンテキスト依存のルールで該当ケースを確認します。

    • 合格条件: 「指摘しないでください/次の場合にのみ指摘」の対象外であることを一文で説明できるか、指摘を取り下げること。
  3. プロトコル横断の検証 — review-verification-protocol を適用し(例:「未使用」と指摘する前に関数/ブロック全体を読み、使用箇所を検索する)、同じ指摘を検証します。

    • 合格条件: 主張の種類に関連するプロトコルチェックを少なくとも一つ満たし、異議を受けた場合にその根拠として提示できること。

指摘を提出する前に

**ゲート(順番)**とリンク先のプロトコルを満たしたうえで、指摘ごとに [FILE:LINE] ISSUE_TITLE を使用してください。

コメント