モックとスタブ
『単体テストの考え方/使い方』を読んでる。
モックは最終的な結果を簡単に検証できない場合に使う手段。
例えば、テスト対象のAPIが最終的に非同期ジョブをエンキューするとしたら簡単に検証できないので、
非同期ジョブをエンキューするメソッドが呼ばれるというコミュニケーションを模倣する。
そして実際に呼ばれることを検証する。
本の中では モックはテスト対象システムが外側に副作用をもたらすときに使うとある。
スタブは最終的な結果をつくる過程をホンモノで再現できないときに使う手段。
最終結果をつくる過程で、依存オブジェクトとのコミュニケーションを模倣し、依存オブジェクトが返す値も設定する。
本の中では スタブはテスト対象システムが外側から何かをfetchするときに使うとある。
この場合、「何かをfetchする」のはあくまで最終結果をつくる過程に組み込まれているものであり、
直接テストしたい対象ではない。だからスタブは検証には使わない。これがモックとの決定的な違い。
「過程に組み込まれているもの」ということはつまり実装の詳細。実装の詳細をテストしてしまうと、そのテストはリファクタリングによって壊れやすいものになってしまう。
すごく分かりやすくて、今まで体系的に考えられてなかったところが整理されていく感覚がある👍