mcpField
M
mocking-stubbing

mocking-stubbing

github.com/aj-geddesテスト・品質373429 回インストール34 週間前に更新
リポジトリ

mocking-stubbing について

mocking-stubbingは、依存関係を制御可能なテストダブルに置き換え、コードを分離してテストするためのスキルです。JavaScript/TypeScript、Python、Javaのテスト例と指針を含みます。

主な機能

  1. 01外部依存をテストダブルに置換
  2. 02オブジェクト間のやり取りを検証
  3. 03エラーや境界ケースを再現
  4. 04Jest、unittest.mock、Mockitoのガイド
  5. 05モックの設定と再利用に関する指針

活用シーン

  1. 01データベースやネットワーク呼び出しなしでサービスをテスト
  2. 02実際の障害を起こさず失敗経路を確認
  3. 03時間や乱数に関わる動作をテスト
  4. 04ユニットテストで遅い処理や高コスト処理を回避

インストール

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

$npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill mocking-stubbing

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

同梱ファイル

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

references/
advanced-mocking-patterns.md
jest-mocking-javascripttypescript.md
mockito-for-java.md
python-mocking-with-unittestmock.md
scripts/
scaffold-tests.sh
templates/
test-template.js

詳細

モックとスタブ

目次

概要

モックとスタブは、依存関係を制御可能なテストダブルに置き換え、テスト中にコードの単位を分離するための重要な手法です。これにより、データベース、API、ファイルシステムなどの外部システムに依存しない、高速で信頼性が高く、焦点の定まったユニットテストを実施できます。

使用する場面

  • ユニットテストを外部依存関係から分離する
  • 時間のかかる処理(DB、ネットワーク)に依存するコードをテストする
  • エラー条件やエッジケースをシミュレートする
  • オブジェクト間のやり取りを検証する
  • 非決定的な動作(時刻、ランダム性)を伴うコードをテストする
  • テストでコストのかかる処理を避ける
  • 実際に障害を発生させずにエラー処理をテストする

クイックスタート

最小限の動作例:

// services/UserService.ts
import { UserRepository } from "./UserRepository";
import { EmailService } from "./EmailService";

export class UserService {
  constructor(
    private userRepository: UserRepository,
    private emailService: EmailService,
  ) {}

  async createUser(userData: CreateUserDto) {
    const user = await this.userRepository.create(userData);
    await this.emailService.sendWelcomeEmail(user.email, user.name);
    return user;
  }

  async getUserStats(userId: string) {
    const user = await this.userRepository.findById(userId);
    if (!user) throw new Error("User not found");

    const orderCount = await this.userRepository.getOrderCount(userId);
    return { ...user, orderCount };
  }
}

// ... (see reference guides for full implementation)

リファレンスガイド

references/ ディレクトリにある詳細な実装:

ガイド内容
Jest モック(JavaScript/TypeScript)Jest モック(JavaScript/TypeScript)
unittest.mock を使った Python のモックunittest.mock を使った Python のモック
Java 用 MockitoJava 用 Mockito
高度なモックパターン高度なモックパターン

ベストプラクティス

✅ 推奨事項
  • 外部依存関係(DB、API、ファイルシステム)をモックする
  • モックしやすくするために依存性注入を使用する
  • モックを使って重要なやり取りを検証する
  • テスト間でモックをリセットする
  • 境界(リポジトリ、サービス)でモックする
  • 必要に応じて部分的なモックにスパイを使用する
  • 再利用可能なモックファクトリーを作成する
  • 成功と失敗の両方のシナリオをテストする
❌ 避けるべき事項
  • 何もかもモックする(自分が所有するものはモックしない)
  • モックとのやり取りを過度に細かく指定する
  • 統合テストでモックを使用する
  • 単純なユーティリティ関数をモックする
  • 複雑なモック階層を作成する
  • モックの呼び出しを検証し忘れる
  • テスト間でモックを共有する
  • テストを通すためだけにモックする

コメント