テスト戦略とパターン
テストピラミッドや単体テスト、結合テストといった様々なテスト戦略やパターンを理解し、テスト駆動開発やモック戦略など、効果的なテスト設計と実装を支援するSkill。
📜 元の英語説明(参考)
Cross-language testing strategies and patterns. Triggers on: test pyramid, unit test, integration test, e2e test, TDD, BDD, test coverage, mocking strategy, test doubles, test isolation.
🇯🇵 日本人クリエイター向け解説
テストピラミッドや単体テスト、結合テストといった様々なテスト戦略やパターンを理解し、テスト駆動開発やモック戦略など、効果的なテスト設計と実装を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o testing-ops.zip https://jpskill.com/download/5947.zip && unzip -o testing-ops.zip && rm testing-ops.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5947.zip -OutFile "$d\testing-ops.zip"; Expand-Archive "$d\testing-ops.zip" -DestinationPath $d -Force; ri "$d\testing-ops.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
testing-ops.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
testing-opsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
テストパターン
言語を問わず適用できる普遍的なテスト戦略とパターンです。
テストピラミッド
/\
/ \ E2E テスト (少ない、遅い、高価)
/ \ - フルシステムテスト
/------\ - 実際のブラウザ/API呼び出し
/ \
/ Integ \ 統合テスト (いくつか)
/ Tests \ - サービス境界
/--------------\ - データベース、API
/ \
/ Unit Tests \ 単体テスト (多い、速い、安価)
------------------ - 単一の関数/クラス
- モックされた依存関係
テストの種類
単体テスト
スコープ: 単一の関数/メソッド/クラス
速度: ミリ秒
依存関係: すべてモック
いつ: すべてのコード変更時
カバレッジ: コードベースの80%以上
統合テスト
スコープ: 複数のコンポーネントをまとめて
速度: 秒
依存関係: 実際のデータベース、モックされた外部API
いつ: PR/マージ時、クリティカルパス
カバレッジ: 主要な統合ポイント
エンドツーエンドテスト
スコープ: 完全なユーザー体験
速度: 分
依存関係: 実際のシステム (またはステージング)
いつ: デプロイ前、夜間
カバレッジ: 重要なユーザーフローのみ
テスト命名規則
test_<unit>_<scenario>_<expected>
例:
- test_calculate_total_with_discount_returns_reduced_price
- test_user_login_with_invalid_password_returns_401
- test_order_submit_when_out_of_stock_raises_error
Arrange-Act-Assert (AAA)
def test_calculate_discount():
# Arrange - テストデータと依存関係を設定します
cart = Cart()
cart.add_item(Item(price=100))
discount = Discount(percent=10)
# Act - テスト対象のコードを実行します
total = cart.calculate_total(discount)
# Assert - 結果を検証します
assert total == 90
テストダブル
| タイプ | 目的 | 例 |
|---|---|---|
| Stub | 決められたデータを返します | stub.get_user.returns(fake_user) |
| Mock | インタラクションを検証します | mock.send_email.assert_called_once() |
| Spy | 呼び出しを記録し、実際の実装を使用します | spy.on(service, 'save') |
| Fake | 動作する簡略化された実装です | 実際のDBの代わりに FakeDatabase() |
| Dummy | プレースホルダーで、決して使用されません | 必須パラメータの null オブジェクト |
テスト分離戦略
データベース分離
オプション 1: トランザクションロールバック (高速)
- テスト前にトランザクションを開始します
- テスト後にロールバックします
オプション 2: テーブルの切り捨て (中速)
- テスト間で全てのデータをクリアします
オプション 3: データベースの分離 (低速)
- 各テストが新しいデータベースを取得します
外部サービス分離
オプション 1: 境界でのモック
- HTTPクライアントをモックに置き換えます
オプション 2: フェイクサーバー
- WireMock, MSW, VCR cassettes
オプション 3: 契約テスト
- Pact, コンシューマー駆動契約
テストすべきこと
必須でテストすべきこと
- ビジネスロジックと計算
- 入力検証とエラー処理
- セキュリティに敏感なコード (認証、権限)
- エッジケースと境界条件
テストすべきこと
- 統合ポイント (DB, API)
- 状態遷移
- 設定処理
テストを避けるべきこと
- フレームワークの内部
- サードパーティライブラリの動作
- 単純なゲッター/セッター
- プライベートな実装の詳細
テスト品質チェックリスト
- [ ] テストは独立しています (順序依存性がない)
- [ ] テストは決定的です (不安定なテストがない)
- [ ] テストは高速です (単体 < 100ms, 統合 < 5s)
- [ ] テストは動作を記述する明確な名前を持っています
- [ ] テストはハッピーパスとエラーケースの両方をカバーしています
- [ ] テストは本番ロジックを繰り返しません
- [ ] モックは最小限です (外部境界のみ)
追加リソース
./references/tdd-workflow.md- テスト駆動開発サイクル./references/mocking-strategies.md- モックするタイミングと方法./references/test-data-patterns.md- フィクスチャ、ファクトリ、ビルダー./references/ci-testing.md- CI/CDパイプラインでのテスト
スクリプト
./scripts/coverage-check.sh- カバレッジを実行し、しきい値を下回った場合に失敗させます
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Testing Patterns
Universal testing strategies and patterns applicable across languages.
The Test Pyramid
/\
/ \ E2E Tests (few, slow, expensive)
/ \ - Full system tests
/------\ - Real browser/API calls
/ \
/ Integ \ Integration Tests (some)
/ Tests \ - Service boundaries
/--------------\ - Database, APIs
/ \
/ Unit Tests \ Unit Tests (many, fast, cheap)
------------------ - Single function/class
- Mocked dependencies
Test Types
Unit Tests
Scope: Single function/method/class
Speed: Milliseconds
Dependencies: All mocked
When: Every code change
Coverage: 80%+ of codebase
Integration Tests
Scope: Multiple components together
Speed: Seconds
Dependencies: Real databases, mocked external APIs
When: PR/merge, critical paths
Coverage: Key integration points
End-to-End Tests
Scope: Full user journey
Speed: Minutes
Dependencies: Real system (or staging)
When: Pre-deploy, nightly
Coverage: Critical user flows only
Test Naming Convention
test_<unit>_<scenario>_<expected>
Examples:
- test_calculate_total_with_discount_returns_reduced_price
- test_user_login_with_invalid_password_returns_401
- test_order_submit_when_out_of_stock_raises_error
Arrange-Act-Assert (AAA)
def test_calculate_discount():
# Arrange - Set up test data and dependencies
cart = Cart()
cart.add_item(Item(price=100))
discount = Discount(percent=10)
# Act - Execute the code under test
total = cart.calculate_total(discount)
# Assert - Verify the results
assert total == 90
Test Doubles
| Type | Purpose | Example |
|---|---|---|
| Stub | Returns canned data | stub.get_user.returns(fake_user) |
| Mock | Verifies interactions | mock.send_email.assert_called_once() |
| Spy | Records calls, uses real impl | spy.on(service, 'save') |
| Fake | Working simplified impl | FakeDatabase() instead of real DB |
| Dummy | Placeholder, never used | null object for required param |
Test Isolation Strategies
Database Isolation
Option 1: Transaction rollback (fast)
- Start transaction before test
- Rollback after test
Option 2: Truncate tables (medium)
- Clear all data between tests
Option 3: Separate database (slow)
- Each test gets fresh database
External Service Isolation
Option 1: Mock at boundary
- Replace HTTP client with mock
Option 2: Fake server
- WireMock, MSW, VCR cassettes
Option 3: Contract testing
- Pact, consumer-driven contracts
What to Test
MUST Test
- Business logic and calculations
- Input validation and error handling
- Security-sensitive code (auth, permissions)
- Edge cases and boundary conditions
SHOULD Test
- Integration points (DB, APIs)
- State transitions
- Configuration handling
AVOID Testing
- Framework internals
- Third-party library behavior
- Simple getters/setters
- Private implementation details
Test Quality Checklist
- [ ] Tests are independent (no order dependency)
- [ ] Tests are deterministic (no flaky tests)
- [ ] Tests are fast (unit < 100ms, integration < 5s)
- [ ] Tests have clear names describing behavior
- [ ] Tests cover happy path AND error cases
- [ ] Tests don't repeat production logic
- [ ] Mocks are minimal (only external boundaries)
Additional Resources
./references/tdd-workflow.md- Test-Driven Development cycle./references/mocking-strategies.md- When and how to mock./references/test-data-patterns.md- Fixtures, factories, builders./references/ci-testing.md- Testing in CI/CD pipelines
Scripts
./scripts/coverage-check.sh- Run coverage and fail if below threshold