pytest-code-review について
pytest-code-reviewは、pytestのテストコードを確認するレビュースキルです。非同期テスト、フィクスチャ、モックを調べるレビュアー向けに、対象ファイルや参照資料、指摘箇所を確認するゲートを設けています。
主な機能
- 01レビュー対象ファイルの列挙
- 02同期テストと非同期テストの区別
- 03フィクスチャのスコープと後処理の確認
- 04モックとpatchの使用箇所の確認
- 05指摘へのファイルパスまたはテストノードIDの必須化
活用シーン
- 01非同期テストとAsyncMockの使い方のレビュー
- 02conftest.pyのフィクスチャとリソース後処理の確認
- 03patch対象とモック呼び出しアサーションの確認
- 04パラメーター化できるテストや重複ロジックの特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill pytest-code-reviewインストール後、Claude Code で/pytest-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/async-testing.mdfixtures.mdmocking.mdparametrize.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 固有の問題を指摘しないでください。
- 対象ファイル — 合格条件: 指摘するすべての
test_*.pyとconftest.pyを列挙し、その一覧にないファイルについて指摘していないこと。 - 非同期か同期か — 合格条件: 対象ファイルごとに、
async def test_*/awaitを使用しているかを記載すること。使用している場合は、非同期の使用方法を批判する前に references/async-testing.md を開くこと。 - フィクスチャ — 合格条件: 共通のセットアップが関係する場合は、
conftest.pyのパスを示すか、存在しないと明記すること。yield フィクスチャについては、リソースリークを指摘する前にクリーンアップがあることを確認すること。 - patch/モック — 合格条件:
patchまたはモックに関する指摘では、シンボルが使用される場所(呼び出し箇所)のインポートパスを示すか、該当なしと記載すること。モックがレビューの中心となる場合は、references/mocking.md を開くこと。 - 指摘事項 — 合格条件: 各指摘に、一般論の言い換えではなく、ファイルパスと行番号、またはテストノード 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
レビュー時の質問
- すべての非同期関数を async def test_* でテストしていますか?
- フィクスチャのスコープは適切で、適切なクリーンアップが行われていますか?
- 類似するテストケースをパラメーター化して重複を減らせますか?
- モックは呼び出しを追跡し、適切な場所で使用されていますか?
コメント
Markdown 対応