スタブとは?
スタブとは、あらかじめ定義された応答を返すシンプルな代役であり、依存関係がどのように使われたかを検証することなくそれを制御できるようにするものです。
スタブは最も基本的な種類のテストダブルです。定型的な応答を渡しておくことで、テスト対象のコードは、実際の依存関係がどう振る舞うかに関係なく、依存関係から予測可能な入力を受け取ります。モックとは異なり、スタブはどのように呼び出されたかを気にしません。ただ応答を提供するだけです。
スタブが提供するもの
スタブは実際の協力オブジェクトを固定された応答のセットに置き換えます。コードが価格サービスに値を尋ねると、スタブは単に設定した数値を返し、テストからばらつきと外部依存を取り除きます。
スタブとモックの違い
違いは何をアサートするかにあります。スタブでは、テスト対象コードの出力をアサートします。モックでは、それに加えてインタラクション、つまり依存関係が特定の方法で呼び出されたことをアサートします。スタブは呼び出しについて沈黙を保ちますが、モックは声を上げます。
簡単な例
スタブ化した clock は固定された時刻を返すため、「今」に依存するテストが安定した再現可能な結果を生み出します。
A stub returning a fixed value
const clock = { now: () => 1700000000000 }; // fixed time
expect(greeting(clock)).toBe("Good evening");スタブを使うべきとき
- 依存関係から決定的な入力が必要なとき。
- インタラクションではなく結果を重視するとき。
- エラーや空データのようなエッジケースをシミュレートしたいとき。
- 完全なモックよりも軽量な代替が欲しいとき。
スタブとCIの決定性
スタブは、システムクロック、ランダム性、ネットワーク応答といった非決定性の要因を取り除きます。これこそが、実行のたびにテストを安定させるものです。安定したテストはCIでの誤った失敗を減らし、グリーンのチェックの信頼性を保ちます。
重要なポイント
- スタブは定型的な応答を返して依存関係を制御します。
- インタラクションを検証しない点が、モックとの違いです。
- スタブは非決定性を取り除き、CIのテストを安定させます。
関連ガイド
What Is a Mock?Mocks explained: how a mock stands in for a real dependency and verifies interactions, how it differs from st…
What Is a Spy?Spies explained: how a spy records calls to a real or wrapped function so you can assert on them, how it comp…
What Is a Test Double?Test doubles explained: the umbrella term for mocks, stubs, spies, fakes, and dummies, when to reach for each…
What Is Test Isolation?Test isolation explained: why each test must run independently of others, how shared state breaks suites, an…