【すたぶ】

スタブ とは?

最終更新:
💡 テストしたい場面の応答を用意する代役

テスト対象が呼ぶ依存先の代わりに、あらかじめ用意した応答を返す代役。固定値だけに限らないこと、モックとの役割の違い、本物との接続確認も必要なことを解説します。

📌 このページのポイント
スタブ:用意した応答で動作を確認テスト対象天気を表示するコードスタブ応答を用意例:「晴れ」呼出し応答期待どおり「晴れ」と表示するか本物のAPIとの接続確認は別の検証
天気APIの代役から応答を返すテスト例です。本物への通信は行いません。固定値だけに限らず、失敗の場面などもテストの目的に合わせて用意します。
ひよこ ひよこ
スタブは、何の代わりになるの?
ペンギン先生 ペンギン先生
例えば、天気を表示するコードが呼ぶ天気APIの代わりだ。テストで本物へ接続せず、「晴れ」という応答を用意すれば、そのとき表示する内容を確かめられる。
ひよこ ひよこ
いつも同じ値だけを返すの?
ペンギン先生 ペンギン先生
固定値は一つの例だよ。テストに合わせて、呼び方や順序で応答を変えたり、エラーを起こしたりすることもある。大切なのは、確かめたい場面の応答を制御する役割だ。
ひよこ ひよこ
モックとは、どちらが高機能なの?
ペンギン先生 ペンギン先生
高機能かどうかより役割を見よう。Fowlerの分類では、スタブは応答を用意し、モックは期待した呼び出しがあったかなどを検証する。同じ道具で、両方の役割を実装できることもある。
ひよこ ひよこ
ほかのテストダブルとの違いは?
ペンギン先生 ペンギン先生
この分類では、スパイは呼び出し情報も記録する代役、フェイクは簡略化した動く実装、ダミーは使わない引数などを埋める代役だ。スパイが必ず本物の処理を実行するわけではない。
ひよこ ひよこ
外部APIは、すべてスタブにすればよい?
ペンギン先生 ペンギン先生
テストの目的による。応答ごとの処理を切り分けるには役立つが、用意した応答が本物と違うこともある。本物や検証環境との接続、形式、契約などを確かめるテストも組み合わせよう。
もっと詳しく知りたい人へ

ライブラリで「mock」と呼ぶ機能なら、スタブではない?

名前だけでは決まりません。Jestのmock関数は、返す値や非同期の応答を用意する機能と、呼び出しを記録する機能を持ちます。応答を制御するために使っているのか、呼び出しを検証しているのか、テストでの使い方を見ます。

成功の応答だけを用意すれば、十分?

失敗時の動作を確かめたいなら、その場面も用意します。例えばAPIのエラーやデータがない応答などです。ただし、スタブの設定どおりに表示できることだけを確かめて終わらず、テスト対象の期待する動作を検証し、本物との違いも確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スタブ」って出てきたら「テストしたい場面の応答を用意する代役」と思えばだいたいOK!そのテストが通っても、本物との接続まで確かめたことにはならないよ。
📖 おまけ:英語の意味
「Stub」 = ここでは、テストで用意した応答を返す代役
💬 テストダブルの一種です。このページはMartin Fowlerが紹介する分類を参考にしています。資料やライブラリによって、mockなどの呼び方が広く使われる場合があるため、名前だけで役割を決めないようにします。

参考資料

← 用語集にもどる