はじめに
呼び出すとコストがかかる処理やそもそもテスト環境で呼び出せない処理を「モックする」ことはよくある。ただ「モック」に関する用語が色々あってよくわからない 🤯

この記事は?
- 『Clean Craftsmanship 規律、基準、倫理』という書籍で説明されている定義を紹介する
- RSpec の文脈だとまた話が変わってきそう
説明
Test Double, Dummy, Stub, Spy, Mock は並列なものというわけではない。階層構造になっている。
Test Double

- あるオブジェクトの代わりを演じる
- double: 代役、影武者
- 俳優の代わり: スタントダブル
- 俳優の手の代わり: ハンドダブル
- 俳優の身体の代わり: ボディダブル
Dummy

- 何もしない実装を持つテストダブル
- メソッドが値を場合は null や 0 を返す
- dummy: マネキン人形、模造品
Stub

- メソッドが null や 0 ではなく、固有の値を戻すダミー
- テストする経路に関数を仕向ける。
- stub: (鉛筆などの) 使い残り、半券、切り株
Spy

- 何が行われたかを記憶するスタブ
- spy: スパイ、〜をひそかに調べる
Mock

- メソッドが null や 0 ではなく、固有の値を戻すダミー
- 何が行われたかを記憶するスタブ
- 何が期待されているかを把握し、その期待に基づいてテストを成功あるいは失敗させるスパイ
- mock: 〜をあざ笑う、模擬の、偽の
参考
Web
- Test Double Patterns at XUnitPatterns.com
- これで迷わないテストダブルの分類(ダミー、スタブ、スパイ、モック、フェイク) - Qiita
- instance_doubleとinstance_spyの使い分け
- Spies - Basics - RSpec Mocks - RSpec - Relish
書籍
-
Clean Craftsmanship 規律、基準、倫理
- 第 3 章: テスト駆動開発応用 > テストダブル