python-testing-patterns について
Python 開発者向けのテストパターンスキルです。動作変更を安全にするための焦点を絞ったテストを扱い、構成、境界の分離、フィクスチャ、モック、テストスイートの階層を説明します。
主な機能
- 01焦点を絞った準備・実行・検証の構成
- 02境界とエラーケースのテスト
- 03フィクスチャとモックの案内
- 04テストスイートのピラミッドの説明
- 05対象を絞ったテストのチェック項目
活用シーン
- 01特定の動作を検証するテストの作成
- 02エラー経路や入力パターンのテスト
- 03ネットワークやデータベースの影響の分離
- 04単体・統合・エンドツーエンドテストの計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jurgendn/ agent-skills --skill python-testing-patternsインストール後、Claude Code で/python-testing-patternsを入力して読み込まれたか確認します。
同梱ファイルreferences/advanced-patterns.md
詳細
Python テストパターン
変更時に動作の安全性を保てるテストを書きましょう。巧妙なフィクスチャやカバレッジのためだけのテストより、対象を絞った読みやすいテストを優先してください。
非同期テスト、モンキーパッチ、プロパティベーステスト、データベーステスト、CI、カバレッジツールなどの高度なパターンについては、references/advanced-patterns.md をお読みください。
基本原則
- テストごとに1つの動作を検証します。 失敗から、どの動作が壊れているのかが分かるようにします。
- Arrange/Act/Assert の構成にします。 準備、実行、検証を明確に分けます。
- 境界とエラーをテストします。 正常系のテストだけでは不十分です。
- 外部への作用を分離します。 テスト対象の動作ではない場合は、ネットワーク、時刻、乱数、サービスをモックします。
- 意味のあるカバレッジを確保します。 すべての行ではなく、重要な動作やリスクをカバーします。
基本的な Pytest パターン
def test_adds_two_numbers():
result = add(2, 3)
assert result == 5
例外の場合:
import pytest
def test_rejects_zero_division():
with pytest.raises(ValueError, match="zero"):
divide(1, 0)
パラメーター化したケースの場合:
import pytest
@pytest.mark.parametrize("value, expected", [
("[email protected]", True),
("not-an-email", False),
])
def test_email_validation(value, expected):
assert is_valid_email(value) is expected
フィクスチャ
有効期間が明確で、再利用可能なセットアップにはフィクスチャを使用します。
@pytest.fixture
def user():
return User(id=1, email="[email protected]")
隠れたフィクスチャの複雑な依存関係は避けてください。テストで多くのフィクスチャが必要な場合、単位が密結合しているか、テストの範囲が広すぎる可能性があります。
モック
システム境界でモックを使用します。
- HTTP クライアント
- ファイルシステムやオブジェクトストレージ
- 永続化をテストしない場合のデータベースセッション
- 時刻や乱数
- コストの高いモデル/API 呼び出し
呼び出しのアサーションが脆弱になるほど動作が複雑な場合は、モックよりフェイクを優先してください。
テストスイートの構成
小さなピラミッド型の構成にします。
- 純粋なロジックには、多数のユニットテスト
- 境界には、少数の統合テスト
- 重要なワークフローには、少数のエンドツーエンドテスト
動作に基づいてテストに名前を付けます。
test_<unit>_<scenario>_<expected_behavior>
出力
テストについて助言する場合やテストを作成する場合は、次の内容を提示します。
- 対象の動作
- 必要なテストレベル
- フィクスチャ/モック
- 具体的なテストケース
- 不足している境界値/エラーパス
- 対象を絞ったテストを実行するコマンド
コメント
Markdown 対応