

中嶋悟
名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝
テストダブルとモックの違いを徹底解説する記事
テストをするとき、外部の依存関係を実際に使わずに挙動を再現するテストダブルという考え方があります。
この中にはいくつかの種類があり、それぞれ役割や使いどころが異なります。
特にモックは「この動作をこの順番で呼ぶべきだ」という期待を設定して検証する道具としてよく使われます。
この記事では、テストダブルの概念を基礎から解きほぐし、モックと他の種類(ダミー、スタブ、フェイク、スパイ)の違いを、初心者にも理解しやすい言葉と具体例を混ぜて説明します。
後半には実務での使い分けのコツと、混同しがちなポイントをわかりやすい表にまとめました。
読み進めるほど、テスト設計の視野が広がり、安定したテスト作成の手がかりがつかめます。
テストダブルとは何か。基本を押さえる
まず「テストダブル」という言葉の意味をしっかり押さえましょう。
テストダブルは、テスト中に現実の依存先を置き換える“仮の部品”の総称です。外部のデータベース、API、ファイルシステム、もしくは複雑で遅い処理を持つクラスなど、テストを走らせる際に実際の挙動を再現させるとテストが遅くなったり、場合によっては失敗の原因が分かりにくくなります。そこでテストダブルを使うことで、テスト環境を安定させ、期待どおりの挙動を検証できるようにします。
この概念はソフトウェアの品質を守るうえで欠かせない道具箱のようなものです。
なお、テストダブルには「ダミー」「スタブ」「フェイク」「スパイ」「モック」など複数の種類があり、それぞれ目的と使い方が異なります。以下の説明で違いを整理します。
モックと他のテストダブルの違いを整理する
モックは、テスト実行中に特定の呼び出し方を事前に期待しておき、実際の呼び出しがその期待どおりかを検証します。
一方、ダミーは実際には機能を使わないけれど、呼び出しが必須になる場所に配置して参照可能にするだけの“存在”です。
スタブは、外部依存の返り値を事前に固定して、テスト対象の処理が特定のケース(例:成功・失敗・例外)をどう扱うかを検証します。
フェイクは、実装は簡易版ですが、挙動が実際の依存に近い動きをする実装部品です。
スパイは、呼ばれた履歴を記録して後から検査できるダブルで、実際の返り値は基本的に本物と同じか、最小限の変更で返します。
これらを適切に使い分けると、テストの意図が伝わりやすく、失敗の原因追跡が容易になります。
なお、モックの「期待どおりに呼ばれたか」という検証は、テストの焦点が“機能の正確な実装”にあるのか、それとも“動作の安定性”にあるのかによって、使い方が変わります。
実務では、モックを使って呼び出し順序や回数を検証するケースが多く、スタブやフェイクは挙動の安定性を先に確保する用途で使われることが多いです。
実務での使い分けと注意点
実務での使い分けには以下のようなポイントがあります。
1) テストの目的を明確にすること。機能が正しく動くかを検証したいのか、相互作用を検証したいのかで選ぶダブルが変わります。
2) 依存先の特性を考えること。外部APIは遅い・不安定になることがあるので、モックやスタブを使って安定させるのが基本です。
3) テストのメンテナンス性を考えること。過度に厳密なモックは、仕様変更時の修正コストが大きくなりがちです。柔軟性を重視するなら、過度な期待を設定しすぎない設計が望ましいです。
4) 実装の理解度を維持すること。モックの期待を厳密に守ろうとすると、テストコード自体が複雑になり過ぎることがあります。要は「何を検証したいのか」を常に意識することです。
下記の表は、各タイプの要点をまとめたものです。
まとめと実務でのコツ
結論として、モックは「呼び出し方の検証」に強みがあり、スタブやフェイクは「挙動の安定と簡易実装」に向きます。実務では、過度にモックに頼るとテストコードが硬直し、仕様変更時の修正コストが増えることがあります。したがって、最初はスタブやフェイクで安定性を確保し、必要な箇所だけモックを使って相互作用を検証するのが現実的です。
このバランス感覚を身につけることが、良いテスト設計の第一歩です。
友達とおしゃべりしているみたいな雰囲気で話すと、モックの“約束ごと”の部分が分かりやすくなるよ。例えばゲームのルールを決めるとき、相手が本当にその動きをするか確認したい場面を想像してみて。モックはその“約束”を作って、実際にその通り動いたかを教えてくれる道具。ダミーやスタブは、動きを厳密にチェックしなくても済むように、そっと存在だけを置いてくれる。こんな感じで使い分けると、テストがスムーズになるんだ。