【もっく】

モック とは?

💡 テスト用の「偽物コンポーネント」、本物を使わずに動作をシミュレート
📌 このページのポイント
モック ― テスト用の代役オブジェクト 本番環境:外部サービスに依存 テスト対象 外部API (遅い・有料・不安定) データベース (セットアップ大変) テスト環境:モックで代替 テスト対象 APIモック 固定レスポンスを返す DBモック メモリ上で動作 モックのメリット 高速で実行可能 外部依存なし 再現性が高い
モックのイメージ
ひよこ ひよこ

テストでモックを使うのはなぜ?

ペンギン先生 ペンギン先生

例えばメール送信機能のテストで本物のメール送信APIを呼ぶと、テストのたびにメールが送られる。モックを使えば「メール送信メソッドが呼ばれた」と記録するだけで、実際にはメールを送らない。速くて安全にテストできる。

ひよこ ひよこ

スタブとは違うの?

ペンギン先生 ペンギン先生

厳密には違う。スタブは「指定した値を返す代役」、モックは「呼ばれたかどうか・どう呼ばれたかを検証できる代役」。でも現場では「モック」という言葉がスタブの意味でも使われることが多い。

ひよこ ひよこ

モックが多すぎるとよくないの?

ペンギン先生 ペンギン先生

そう、過度なモックは問題。実際のコンポーネントとの動作のズレを隠してしまうから。「モックを使ったテストが通っているのに本番環境で動かない」という事態が起きることがある。重要な部分は実際の環境でのインテグレーションテストも必要。

ひよこ ひよこ

モックを作るのにライブラリって必要なの?

ペンギン先生 ペンギン先生

言語ごとに定番のライブラリがあるよ。JavaならMockito、PythonならunittestのMockモジュールJavaScriptならJestに組み込みのモック機能がある。これらを使うと数行でモックが作れるから便利なんだ。

ひよこ ひよこ

テストダブルって言葉も聞くけど、モックとは違うの?

ペンギン先生 ペンギン先生

テストダブルは「テスト用の代役」の総称で、モックはその一種だよ。他にもスタブ(固定値を返す)、スパイ(呼び出しを記録するが本物の処理も実行)、フェイク(簡易版の実装)、ダミー(引数を埋めるだけ)がある。現場ではこれらを全部まとめて「モック」と呼ぶことが多いけど、テストの設計を深く考えるときは区別を知っておくと役立つよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
モックって出てきたら「テスト時に本物の代わりに使う偽物コンポーネント、外部依存を排除するためのもの」と思えばOK!
📖 おまけ:英語の意味
「Mock」 = 模倣・偽物・まがいもの
💬 「mock up(モックアップ)」と同語源で「本物に見せかけた偽物」の意味。テスト用の「偽の実装」を指す
← 用語集にもどる