📝
【図解】モック・スタブ・スパイ
概要
単体テストを実施しているとよく耳にする、モック・スタブ・スパイ
今回は用語についてまとめてみました。
これらを総称してテストダブルと呼びます。
引用:https://ja.wikipedia.org/wiki/テストダブル
テストダブル一覧
用語 | 役割 |
---|---|
スタブ | テスト対象に「間接的な入力」を提供するために使う。 |
スパイ | テスト対象からの「間接的な出力」を検証するために使う。出力を記録しておくことで、テストコードの実行後に、値を取り出して検証できる。 |
モック | テスト対象からの「間接的な出力」を検証するために使う。テストコードの実行前に、あらかじめ期待する結果を設定しておく。検証はオブジェクト内部で行われる。 |
フェイク | 実際のオブジェクトに近い働きをするが、より単純な実装を使う。実際のデータベースを置き換えるインメモリデータベース、AWSを代替するLocalstackなどが挙げられる。 |
(ダミー)※厳密な意味でのテストダブルではない | テスト対象のメソッドがパラメータを必要としているが、そのパラメータが利用されない場合に渡すオブジェクト。 |
スタブ(TestStub)
テスト対象から呼び出される依存コンポーネントの返却値を事前に準備する。
スパイ(TestSpy)
テスト対象から呼び出される依存コンポーネントの呼び出し回数・引数などを監視する。
モック(MockObject)
テスト対象から依存コンポーネントを呼び出した出力を記録する。
Q&A
- 「モック化する」とよく聞くがテストダブルのモックを指している?
- 本来の定義から逸れるが、モック・スタブ・スパイなどテストダブルを作成することをひっくるめて「モック」と表現することがある。
- モックとスパイの役割が似てない?
- モックはテスト前に動作を設定し、その設定通りに動作します。外部コンポーネントがまだ作成されていない場合や、特定の動作を強制的にシミュレートしたい場合に使用されます。
- スパイは一般的に実際のオブジェクトをラップし、既存のメソッドを呼び出します。
参考
Discussion