mcpField
P
pytest-code-review

pytest-code-review

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

pytest-code-review について

pytest-code-reviewは、pytestのテストコードを確認するレビュースキルです。非同期テスト、フィクスチャ、モックを調べるレビュアー向けに、対象ファイルや参照資料、指摘箇所を確認するゲートを設けています。

主な機能

  1. 01レビュー対象ファイルの列挙
  2. 02同期テストと非同期テストの区別
  3. 03フィクスチャのスコープと後処理の確認
  4. 04モックとpatchの使用箇所の確認
  5. 05指摘へのファイルパスまたはテストノードIDの必須化

活用シーン

  1. 01非同期テストとAsyncMockの使い方のレビュー
  2. 02conftest.pyのフィクスチャとリソース後処理の確認
  3. 03patch対象とモック呼び出しアサーションの確認
  4. 04パラメーター化できるテストや重複ロジックの特定

インストール

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

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

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

同梱ファイル

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

references/
async-testing.md
fixtures.md
mocking.md
parametrize.md

詳細

Pytest コードレビュー

クイックリファレンス

問題の種類リファレンス
async def test_*、AsyncMock、await のパターンreferences/async-testing.md
conftest.py、ファクトリーフィクスチャ、スコープ、クリーンアップreferences/fixtures.md
@pytest.mark.parametrize、DRY パターンreferences/parametrize.md
AsyncMock の呼び出し追跡、patch のパターン、モックを使うタイミングreferences/mocking.md

レビューのゲート

順番に進めてください。該当する各ゲートを通過するまでは、pytest 固有の問題を指摘しないでください。

  1. 対象ファイル — 合格条件: 指摘するすべての test_*.py と conftest.py を列挙し、その一覧にないファイルについて指摘していないこと。
  2. 非同期か同期か — 合格条件: 対象ファイルごとに、async def test_*/await を使用しているかを記載すること。使用している場合は、非同期の使用方法を批判する前に references/async-testing.md を開くこと。
  3. フィクスチャ — 合格条件: 共通のセットアップが関係する場合は、conftest.py のパスを示すか、存在しないと明記すること。yield フィクスチャについては、リソースリークを指摘する前にクリーンアップがあることを確認すること。
  4. patch/モック — 合格条件: patch またはモックに関する指摘では、シンボルが使用される場所(呼び出し箇所)のインポートパスを示すか、該当なしと記載すること。モックがレビューの中心となる場合は、references/mocking.md を開くこと。
  5. 指摘事項 — 合格条件: 各指摘に、一般論の言い換えではなく、ファイルパスと行番号、またはテストノード ID を含めること。

レビューチェックリスト

  • テスト対象のコードが非同期の場合、テスト関数は async def test_* になっている
  • 非同期の依存関係には Mock ではなく AsyncMock を使用している
  • すべての非同期モックとコルーチンを await している
  • 共通のセットアップには conftest.py のフィクスチャを使用している
  • フィクスチャのスコープ(function、class、module、session)が適切である
  • yield フィクスチャに適切な finally ブロックでのクリーンアップがある
  • 類似するテストケースに @pytest.mark.parametrize を使用している
  • 複数のテスト関数間でテストロジックを重複させていない
  • モックで呼び出しを適切に追跡している(assert_called_once_with)
  • patch() の対象が正しい場所(定義箇所ではなく使用箇所)である
  • テスト対象にすべき内部実装をモックしていない
  • テストが分離されている(テスト間で変更可能な状態を共有していない)

リファレンスを読み込むタイミング

  • 非同期テスト関数のレビュー → async-testing.md
  • フィクスチャまたは conftest.py のレビュー → fixtures.md
  • 類似するテストケースのレビュー → parametrize.md
  • モックとパッチのレビュー → mocking.md

レビュー時の質問

  1. すべての非同期関数を async def test_* でテストしていますか?
  2. フィクスチャのスコープは適切で、適切なクリーンアップが行われていますか?
  3. 類似するテストケースをパラメーター化して重複を減らせますか?
  4. モックは呼び出しを追跡し、適切な場所で使用されていますか?

コメント