Mocks Aren't Stubs written by Martin Fowler の mock と stub に関するメモです。1
用語について
Mocks Aren't Stubs 内の用語は Gerard Meszaros の xUnit Test Patterns に基づく。
結果の検証方法
結果の検証には、大別して2つの方法がある。
- State Verification - 状態を検証する方法
- Behavior Verification - 振る舞いを検証する方法
Test Double とは
- テスト内で実際のオブジェクトの代わりに使われるオブジェクトの総称。
-
Double
は Stunt Double(スタントマン)に由来する。 - 既に広く使われている用語を避けるために新しい用語が採用された。
5種類の Test Double
-
Dummy
- 渡されるだけで使われることはない。
- 主に引数リストを埋めるためだけに用いられる。
-
Fake
- 実装を持つが、製品用のものではないものを含む。
- 例:テスト用にインメモリDBで代替した実装を含むなど。
-
Stub
- テスト中の呼び出しに対する応答が設定されている。
- テスト内の呼び出し以外は考慮されていないことが多い。
-
Spy
- Stub の一種。
- 呼び出された情報を記録する。
- 例:email サービスとしてメッセージの送信数を記録するなど。
-
Mock
- expectations(期待された一連の呼び出し仕様)が事前に組み込まれている。
Mock と Stub の違い
- behavior verification を行うのは mock だけ。
- mock 以外は state verification を用いている。
- mock は実行フェーズでは他の double と同様に振る舞うが、前処理と検証フェーズでは異なる。
- mock による behavior verification を stub による state verification で代替する場合、stub に検証用のメソッドを追加する必要が生じる場合がある。2
Classical and Mockist Testing
- classical TDD style
- mockist TDD style