【てすとだぶる】
テストダブル とは?
最終更新:
💡 テストで使う依存先を、目的に合う代役へ
テストの目的に合わせて、本番で使う依存オブジェクトなどを置き換える代役の総称。決まった応答を返す、呼び出しを記録するなど、確かめたいことに応じた役割を持たせる。
📌 このページのポイント
- 本番の依存オブジェクトを、テスト用の代役に置き換える
- Stubは決めた応答、Spyは呼び出しの記録などを担う
- Mockは期待する呼び出しを設定し、その実現を検証する
- 代役で確かめた結果と、本物との連携の確認を区別する
テストダブルって何?
例えば通知処理をテストするとき、本物のメール送信先をテスト用の代役へ置き換えることだよ。送信を実行せずに呼び出しを記録するなど、確認したいことに合わせて作るんだ。
全部モックって呼べばいい?
呼び方には揺れがあるので、ここでは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の用語整理として紹介しているんだ。