Open21
Test Double(stub, mock, fake, dummy, spy)を理解する

参考文献

SUTとは
System Under Testでテスト対象のシステム(オブジェクト)

Test Stubとは

stubとは
主な役割は、SUTへの間接入力を制御すること。
SUTからメソッドが呼び出されたときに、あらかじめ設定しておいた特定の値を返すように作られる

何のために使われる?
テスト中に呼び出された際に事前に用意された応答(値や例外)を提供する。
SUTに特定の間接入力を供給し、SUTを特定のパスに進ませたり、テスト環境で利用できないソフトウェアの部分を回避したりするための制御点として使用される。
間接出力の検証には使用されない

テスト環境で利用できないソフトウェアの部分を回避する具体例
実際の依存コンポーネントは、テストを実行する上で問題となる場合がある
▪まだ利用できない(開発中など)
▪テストに必要な特定の結果を返さない (例: 特定のエラーコードや、特定のタイミングでの応答)
▪望ましくない副作用がある (例: 実際のデータベースへの書き込み、メール送信、外部システムへの接続)
▪実行に時間がかかりすぎる (例: ネットワーク通信、ディスクI/O)

Test Spyとは

Mock Objectとは

間接出力に対する振る舞い検証 (Behavior Verification) を行う
事前に期待値を設定し、SUTからのメソッド呼び出しを受けるたびに、期待値と即座に比較する。期待と異なる呼び出しがあった場合、その場でモック側でアサーションを実行し、テストを失敗させる。
すべてのSUTの実行が完了した後、テストコード側からverifyなどの関数を呼び出し、最終検証も行う。

- 事前に期待値を予測できる時。事前に期待値が予測できない時(sutが生成するデータやsutの状態によって挙動が変わるなど)はspyを利用した方が良い。
- SUTの実行中にのみアクセス可能な値でアサーションを行いたいはSpyではできないのでMockで行う
