【すたぶ】
スタブ とは?
最終更新:
💡 テストしたい場面の応答を用意する代役
テスト対象が呼ぶ依存先の代わりに、あらかじめ用意した応答を返す代役。固定値だけに限らないこと、モックとの役割の違い、本物との接続確認も必要なことを解説します。
📌 このページのポイント
- テスト対象の依存先を、用意した応答を返す代役へ替える
- 正常な応答だけでなく、失敗などの場面も作れる
- モックとの違いは単純さより、検証での役割にある
- スタブを使った成功だけで、本物との連携は保証できない
スタブは、何の代わりになるの?
例えば、天気を表示するコードが呼ぶ天気APIの代わりだ。テストで本物へ接続せず、「晴れ」という応答を用意すれば、そのとき表示する内容を確かめられる。
いつも同じ値だけを返すの?
固定値は一つの例だよ。テストに合わせて、呼び方や順序で応答を変えたり、エラーを起こしたりすることもある。大切なのは、確かめたい場面の応答を制御する役割だ。
モックとは、どちらが高機能なの?
ほかのテストダブルとの違いは?
外部APIは、すべてスタブにすればよい?
テストの目的による。応答ごとの処理を切り分けるには役立つが、用意した応答が本物と違うこともある。本物や検証環境との接続、形式、契約などを確かめるテストも組み合わせよう。
もっと詳しく知りたい人へ
ライブラリで「mock」と呼ぶ機能なら、スタブではない?
名前だけでは決まりません。Jestのmock関数は、返す値や非同期の応答を用意する機能と、呼び出しを記録する機能を持ちます。応答を制御するために使っているのか、呼び出しを検証しているのか、テストでの使い方を見ます。
成功の応答だけを用意すれば、十分?
失敗時の動作を確かめたいなら、その場面も用意します。例えばAPIのエラーやデータがない応答などです。ただし、スタブの設定どおりに表示できることだけを確かめて終わらず、テスト対象の期待する動作を検証し、本物との違いも確認します。
まとめ:ざっくりこれだけ覚えればOK!
「スタブ」って出てきたら「テストしたい場面の応答を用意する代役」と思えばだいたいOK!そのテストが通っても、本物との接続まで確かめたことにはならないよ。
📖 おまけ:英語の意味
「Stub」 = ここでは、テストで用意した応答を返す代役
💬 テストダブルの一種です。このページはMartin Fowlerが紹介する分類を参考にしています。資料やライブラリによって、mockなどの呼び方が広く使われる場合があるため、名前だけで役割を決めないようにします。