【すたぶ】

スタブ とは?

💡 テスト用の「決まった返答しかしない代役」、本物の代わりに固定値を返す
📌 このページのポイント
スタブ ― テスト用の代替オブジェクト 本番コード テスト対象 外部API (本物) 遅い・不安定 コストがかかる 置き換え テストコード テスト対象 スタブ (代替品) 高速・安定 決まった値を返す 例: 決済APIのスタブ → 常に「成功」を返す固定レスポンス モック・フェイクと合わせて「テストダブル」と呼ばれる
スタブのイメージ
ひよこ ひよこ

スタブって何?

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

テストで「本物の代わりに固定の答えを返すだけの偽物」だよ。例えば「天気API」を呼ぶコードをテストするとき、本物のAPIは呼ばず「常に{weather: '晴れ'}を返す偽物API」がスタブ。

ひよこ ひよこ

モックとの違いは?

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

スタブは「決まった値を返す」だけ。モックはそれに加えて「何回呼ばれたか」「どんな引数で呼ばれたか」を記録・検証できる。モックの方が高機能だけど、単に返り値を固定したいだけならスタブで十分。

ひよこ ひよこ

実際にどう書くの?

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

テストフレームワークによるけど、Jestなら「jest.fn().mockReturnValue(data)」でメソッドをスタブ化できる。Pythonのunittestなら「unittest.mock.MagicMock()」を使う。テスト対象のコードに偽物を「注入(DI)」して動かす。

ひよこ ひよこ

テストダブルって他にもあるの?

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

スタブとモック以外に「スパイ」「フェイク」「ダミー」があるよ。スパイは本物のメソッドを実行しつつ呼び出し情報を記録する。フェイクは簡略化した本物(インメモリDBなど)。ダミーは引数を埋めるためだけの使われないオブジェクト。まとめて「テストダブル(代役)」と呼ぶんだ。

ひよこ ひよこ

外部APIに依存するテストってどう書くの?

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

外部APIは遅いし不安定だから、テストでは必ずスタブ化するのが基本だよ。Node.jsならmswやnockというライブラリHTTPリクエストをインターセプトして固定レスポンスを返せる。これで「APIがこう返したとき、画面はこう表示される」というテストが安定して書ける。本物のAPIに依存するテストは「フレイキーテスト(不安定なテスト)」の温床になるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
スタブって出てきたら「テスト時に固定値を返すだけの代替コンポーネント、本物の代わりに使うシンプルな差し込み」と思えばOK!
📖 おまけ:英語の意味
「Stub」 = 切れ端・根っこ・スタブ
💬 「切り株の残り」から転じて「不完全な代替品」の意味。テスト用に「とりあえず動く最低限の実装」として使われる
← 用語集にもどる