サイトアイコン プログラマー(PG)・システムエンジニア(SE)になるための入門講座

モックとスタブの違いとは?初心者向けにテストでの役割・使い分け・ダミーとの違いをわかりやすく解説

モックとスタブの違いとは?初心者向けにテストでの役割・使い分け・ダミーとの違いをわかりやすく解説

結論

モックとスタブは、どちらもソフトウェアテストで本物のシステムの代わりに利用する「テストダブル」の一種ですが、目的が異なります。スタブ(Stub)は決められた値を返す代用品モック(Mock)は戻り値だけでなく「期待どおりに呼び出されたか」まで確認できる代用品です。

初心者は「どちらも本物の代わり」と覚えがちですが、スタブはテストを進めるための代用品、モックは動作を検証するための代用品という違いを理解すると区別しやすくなります。

モックとは

モック(Mock)とは、テスト対象のプログラムが外部システムや別のクラスを正しく利用しているかを確認するための代用品です。

戻り値を返すだけでなく、「何回呼び出されたか」「どの引数で呼び出されたか」なども検証できます。

例えば、メール送信機能では実際にメールを送らず、「送信処理が1回だけ呼ばれたか」を確認するためにモックを利用します。

スタブとは

スタブ(Stub)とは、あらかじめ決められた値やデータを返すだけの代用品です。

本物のデータベースやAPIを利用せず、テストしやすいように固定のデータを返します。

例えば、「ユーザー名は必ず『山田太郎』を返す」といったように、毎回同じ結果を返す役割を持ちます。

モックとスタブの違い

項目 モック スタブ
目的 呼び出しを検証する 決められた値を返す
戻り値 返せる 返せる
呼び出し回数の確認 できる 基本的にできない
引数の確認 できる 基本的にできない
利用場面 動作確認・単体テスト 単体テスト・開発

モックとスタブの使い分け

利用したいこと 使うもの
固定データを返したい スタブ
APIの代わりを作りたい スタブ
メール送信を実行したか確認したい モック
ログ出力が呼ばれたか確認したい モック

イメージで理解する

レストランに例えると理解しやすくなります。

例え 意味
スタブ 毎回同じ料理を出す見本
モック 注文を受けたかまで記録する店員

スタブは料理を提供するだけですが、モックは「誰が注文したか」「何回注文したか」まで記録できます。

テストダブルとは

モックやスタブは、テストダブル(Test Double)と呼ばれる仕組みの一種です。

テストダブルとは、本物のオブジェクトの代わりに利用する部品の総称で、代表的なものには次のような種類があります。

種類 役割
ダミー(Dummy) 引数を埋めるだけで利用する
スタブ(Stub) 固定値を返す
モック(Mock) 呼び出しを検証する
スパイ(Spy) 実際の呼び出し内容を記録する
フェイク(Fake) 簡易的な本物を実装する

どんな場面で使われるのか

なぜ重要なのか

本物のAPIやデータベースを毎回利用すると、テストが遅くなったり、外部サービスが停止しているとテストできなくなったりします。

スタブやモックを利用すると、外部環境に依存せず、安定して高速にテストを実行できます。

初心者が混乱しやすいポイント

モックもスタブも戻り値を返せる

両方とも戻り値を返せますが、モックは「呼び出し方を確認する」ことが主な目的です。

モックを使いすぎるとテストが複雑になる

すべてをモックにすると、実装変更の影響を受けやすくなるため、必要な場面だけ利用することが大切です。

実際のIT現場での利用例

実際の開発現場では、APIが完成する前にスタブを作成し、並行して画面開発を進めることも珍しくありません。

筆者が現場で経験した失敗談

以前、すべての外部サービスをモック化してテストしていたため、本番環境でAPI仕様が変更されていることに気付かず障害が発生したことがありました。

その経験から、単体テストではモックやスタブを利用しつつ、結合テストでは実際のAPIとも接続して確認する運用へ変更しました。

業務でよくあるトラブル

原因の切り分け

確認項目 内容
スタブ 戻り値が最新仕様か
モック 期待値が正しいか
API仕様 変更されていないか
テストデータ 本番に近い内容か
ログ 実際の呼び出し内容

確認する順番

  1. API仕様書を確認する
  2. スタブの戻り値を確認する
  3. モックの期待値を確認する
  4. テストログを確認する
  5. 実環境でも動作確認する

GUIで確認する方法

モックやスタブそのものをGUIで確認することは少ないですが、Webアプリケーションではブラウザの開発者ツール(F12)のNetworkタブを利用して、実際にAPI通信が行われているか、スタブが利用されているかを確認できます。

コマンドプロンプトで確認する方法

スタブが返すデータと実際のAPIを比較する場合は、curlコマンドでAPIを直接呼び出して確認します。

curl https://api.example.com/users

返却されるJSONデータがスタブと一致しているか確認できます。

PowerShellで確認する方法

PowerShellではInvoke-RestMethodを利用してAPIを呼び出し、スタブのデータと比較できます。

単体テストだけでなく、運用時のAPI疎通確認にも活用されています。

ログの確認方法

モックの呼び出し回数やスタブの利用状況、エラー内容を確認できます。

イベントビューアーの確認方法

モックやスタブ自体はイベントビューアーへ記録されません。

Windows上でテストツールやアプリケーションがエラーを出力している場合は、イベントビューアーのアプリケーションログを確認することがあります。

  1. Windows+Rキーを押す
  2. eventvwr.msc と入力する
  3. Windowsログ
  4. アプリケーションを開く
  5. 対象アプリケーションのエラーを確認する

確認結果の見方

結果 意味
テスト成功 期待どおりに動作している
モック検証失敗 呼び出し回数や引数が期待と異なる
スタブエラー 戻り値や設定に問題がある
APIエラー 実際のAPI仕様を確認する

影響範囲を考える

ユーザー側・サーバー側の切り分け

確認対象
テストコード モック・スタブの設定
API 仕様変更、レスポンス
アプリケーション 実装変更
CI/CD テスト環境や実行条件

初心者がやりがちなミス

業務で上司へ報告するポイント

エスカレーションするタイミング

モック・スタブ・ダミー・フェイクの違い

種類 役割 利用例
ダミー(Dummy) 値を渡すだけ 未使用の引数
スタブ(Stub) 固定値を返す API・データベースの代用品
モック(Mock) 呼び出しを検証する メール送信・ログ出力
フェイク(Fake) 簡易実装を提供する インメモリデータベース

関連するIT用語

よくある質問(FAQ)

モックとスタブはどちらを使えばよいですか?

固定のデータを返したい場合はスタブ、呼び出し回数や引数まで確認したい場合はモックを利用します。

モックでも戻り値を返せますか?

はい。モックも戻り値を返せますが、主な目的は「期待どおりに呼び出されたか」を検証することです。

スタブだけでテストしても問題ありませんか?

単体テストでは有効ですが、本番環境との差異を防ぐためには、結合テストや実際のAPIとの接続テストも実施することが重要です。

テストダブルとは何ですか?

本物のオブジェクトの代わりに利用する部品の総称です。モックやスタブ、ダミー、フェイク、スパイなどが含まれます。

まとめ

モックとスタブはどちらもテストダブルですが、スタブは決められたデータを返す代用品モックは呼び出し方法まで検証する代用品という違いがあります。

実際のIT現場では、単体テストではスタブやモックを活用して効率的に開発を進め、結合テストや本番環境では実際のAPIやデータベースと接続して動作を確認することが一般的です。それぞれの役割を理解し、適切に使い分けることで、品質の高いシステム開発につながります。

モバイルバージョンを終了