mocking-stubbing について
mocking-stubbingは、依存関係を制御可能なテストダブルに置き換え、コードを分離してテストするためのスキルです。JavaScript/TypeScript、Python、Javaのテスト例と指針を含みます。
主な機能
- 01外部依存をテストダブルに置換
- 02オブジェクト間のやり取りを検証
- 03エラーや境界ケースを再現
- 04Jest、unittest.mock、Mockitoのガイド
- 05モックの設定と再利用に関する指針
活用シーン
- 01データベースやネットワーク呼び出しなしでサービスをテスト
- 02実際の障害を起こさず失敗経路を確認
- 03時間や乱数に関わる動作をテスト
- 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.mdjest-mocking-javascripttypescript.mdmockito-for-java.mdpython-mocking-with-unittestmock.mdscripts/scaffold-tests.shtemplates/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 用 Mockito | Java 用 Mockito |
| 高度なモックパターン | 高度なモックパターン |
ベストプラクティス
✅ 推奨事項
- 外部依存関係(DB、API、ファイルシステム)をモックする
- モックしやすくするために依存性注入を使用する
- モックを使って重要なやり取りを検証する
- テスト間でモックをリセットする
- 境界(リポジトリ、サービス)でモックする
- 必要に応じて部分的なモックにスパイを使用する
- 再利用可能なモックファクトリーを作成する
- 成功と失敗の両方のシナリオをテストする
❌ 避けるべき事項
- 何もかもモックする(自分が所有するものはモックしない)
- モックとのやり取りを過度に細かく指定する
- 統合テストでモックを使用する
- 単純なユーティリティ関数をモックする
- 複雑なモック階層を作成する
- モックの呼び出しを検証し忘れる
- テスト間でモックを共有する
- テストを通すためだけにモックする
コメント
Markdown 対応