【てすとだぶる】

テストダブル とは?

💡 映画のスタントマンのように、本番コードの「代役」を務めるテスト用の偽物たち
📌 このページのポイント
テストダブルの5種類 Dummy 引数を埋める だけの空の値 Stub 決まった値を 返す代役 Mock 呼び出しも 検証する代役 Spy 本物を実行し 記録もする Fake 簡易実装の 代替品 機能 値を返す 呼出検証 本物実行 Dummy Stub Mock Spy Fake
テストダブルの5種類のイメージ
ひよこ ひよこ

テストダブルってモックのことじゃないの?

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

モックはテストダブルの一種だよ。テストダブルは「テスト用の代役」の総称で、モックスタブ、スパイ、フェイク、ダミーの5種類があるんだ

ひよこ ひよこ

それぞれどう違うの?

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

ダミーは引数を埋めるだけで使わない。スタブは決まった値を返す。モックは「この引数で呼ばれたか」も検証する。スパイは本物の処理を実行しつつ呼び出しを記録する。フェイクは簡易実装の代替品だよ

ひよこ ひよこ

全部モックって呼んじゃダメなの?

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

現場では「モック」とまとめて呼ぶことも多いけど、正確に区別すると設計の意図が伝わりやすいんだ。「スタブで十分なのにモックを使っている」と指摘されることもあるよ

ひよこ ひよこ

テストダブルを使いすぎるとよくないって聞いたけど?

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

内部実装の詳細にテストが依存しすぎると、リファクタリングのたびにテストが壊れるんだ。ロンドン学派はモック多用、デトロイト学派は本物を使う派で、バランスが大事だね

ひよこ ひよこ

フェイクってどんなときに使うの?

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

たとえばインメモリデータベースがフェイクの典型だよ。本物のDBの代わりにメモリ上で動く簡易版を使うことで、テストが高速になる。Repositoryパターンと相性が良いんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テストダブル」って出てきたら「テスト用の代役(モックスタブなど)の総称」と思えればだいたいOK!
📖 おまけ:英語の意味
「Test Double」 = テストの代役
💬 映画の「スタントダブル(代役)」が語源だよ。Gerard Meszarosが著書『xUnit Test Patterns』で定義したんだ
← 用語集にもどる