【てすとだぶる】

テストダブル とは?

最終更新:
💡 テストで使う依存先を、目的に合う代役へ

テストの目的に合わせて、本番で使う依存オブジェクトなどを置き換える代役の総称。決まった応答を返す、呼び出しを記録するなど、確かめたいことに応じた役割を持たせる。

📌 このページのポイント
テストダブル:依存先の代役 テスト対象 通知処理 メール送信の代役 本物への送信を置換 目的に応じて役割を選ぶ Dummy 渡すだけで使わない 未使用の引数を埋める Fake 簡略化した動く実装 テスト用インメモリDB Stub 決めた応答を返す 検索結果を固定する Spy 応答に加え呼出しを記録 メール呼出し回数を記録 Mock 期待する呼出しを検証 期待した引数・回数か確認 代役の結果 ≠ 本物との連携の確認
Fowlerが紹介するMeszarosの分類。上段はメール送信を置き換える例、下段は役割と利用例。
ひよこ ひよこ
テストダブルって何?
ペンギン先生 ペンギン先生
例えば通知処理をテストするとき、本物のメール送信先をテスト用の代役へ置き換えることだよ。送信を実行せずに呼び出しを記録するなど、確認したいことに合わせて作るんだ。
ひよこ ひよこ
全部モックって呼べばいい?
ペンギン先生 ペンギン先生
呼び方には揺れがあるので、ここではFowlerが紹介するMeszarosの分類で整理しよう。Dummy、Fake、Stub、Spy、Mockなどがあり、テストダブルはそれらの総称だよ。
ひよこ ひよこ
DummyとFakeは何が違うの?
ペンギン先生 ペンギン先生
Dummyは引数を埋めるためなどに渡し、実際には使わないもの。Fakeは動く実装を持つけれど、本番用には適さない簡略化をしたものだよ。テスト用のインメモリDBはFakeの例として紹介されているんだ。
ひよこ ひよこ
StubとSpyとMockも教えて!
ペンギン先生 ペンギン先生
Stubは呼び出しに決めた応答を返す。Spyはそれに加えて呼び出しの情報を記録する。Mockは期待する呼び出しをあらかじめ設定して検証するものだよ。この分類のSpyは、本物の処理を必ず実行するという意味ではないんだ。
ひよこ ひよこ
代役を使えば本物の確認は要らない?
ペンギン先生 ペンギン先生
代役に設定した応答や振る舞いの範囲で確認できるんだ。本物のAPIやDBとの連携まで確かめたことにはならないよ。確認したい対象と、代役に任せる部分を決め、必要に応じて本物との連携も別にテストしよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テストダブル」って出てきたら「テストのために使う、本物の依存先の代役」と思えばだいたいOK!
📖 おまけ:英語の意味
「Test Double」 = テストの代役
💬 映画などのstunt double(スタントの代役)になぞらえた呼び方だよ。Martin FowlerはGerard Meszarosの用語整理として紹介しているんだ。

参考資料

← 用語集にもどる