コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

テストダブルの種類をざっくりまとめる

自身の記憶整理の文脈でまとめる

出典

テストダブルについては書籍 xUnit Test Patterns にて取り上げられたテストに依存するコンポーネントを置き換えるためのパターンのこと。

Test Double at XUnitPatterns.com

なおダブルは2倍のほうの意味ではなく、「代役」や「替え玉」などの意味。

テストダブルのパターン

  • TestStub
  • TestSpy
  • MockObject
  • FakeObject

TestStub(テストスタブ)

テストスタブは「テスト対象の中で行われる外部要因の戻り値を偽装する」というような用途の内容になる。

クラス外のメソッドを実行してデータを行うような処理をもつクラスがある場合、その中のメソッドの戻り値をテストコード内を定義して、期待した動きを見るなどになる。

実際あるケースとしては「色々なAPIを叩いてデータを取得した結果を総合計する」等の場合にAPIからの戻り地をテストコードで定義して期待する結果を確認するなどのコードになると思われる。

TestSpy(テストスパイ)

テストスパイは「テスト対象の中で外部への実行の実行先をすり替えて、その実行メソッドの値が期待したものが返ってくるか」というような用途の内容になる。

実際にあるケースとしては「内容を集計して、ファイル書き出しなどをする」というような場合にファイル書き出しの部分をスパイとして置き換えて、実際に書き出される期待値がマッチするかを確かめる、というようなものになると思われる。

MockObject

モックオブジェクトは「予め期待値を設定し、テスト対象の中の外部への実行を見て、期待値担っているかを判断する」というような用途の内容になる。

テストスパイと似たような動きですが、違いとしてはテストスパイはテストの実行後に値を評価するのですが、モックは予め期待値をセットするので、その期待値どおりに動くかを見るという点に違いがあります。

FakeObject

フェイクオブジェクトはまま文字通り、「偽物」として本物と同様の動きをするためのものです。他のものとは異なり、あくまでも検証のための代用品であり、このオブジェクトそのものはテストをすることに使われるものではない。

関連リンク