🐷

テストダブル、モック、スタブ、スパイ、フェイク、ダミーとは?違いは?

2024/07/15に公開

この記事は書籍である「単体テストの考え方/使い方」を参考にして記載しています。

図でイメージを掴もう

テストでしか使われない偽りの依存として表現されるものを包括してテスト・ダブルといいます。
さらにテスト・ダブルの中に大きくモックとスタブというグループがいて、モックグループの中にモックとスパイ、スタブグループの中にスタブ、ダミー、フェイクがいます。

注意点

モックをテスト・ダブルという意味で使うことがあります。あとテスト用のライブラリではspyとかmockを利用した場合に、ここの説明とは異なって利用される場合もあります。

モックとは?

テスト対象が外部に対して正しい出力をしているかどうかを確認する時に使われます。例えばテスト対象が期待通りログ出力できているか、メール送信ができているかなどが挙げられます。外部に向かうコミュニケーションを模倣し、検証するのに使われます。

スタブとは?

テスト対象が外部から正しい入力がされているかどうかを確認する時に使われます。例えばデータベースからデータを取得するなどです。内部に向かうコミュニケーションを模倣するのに使われます。

スパイとは?

モックというグループの中にモックとスパイが存在しています。モックでは依存先を模倣したものを利用しますが、スパイでは依存先を実際に使います。

例えばmethodAmethodBを持つClassAがあった場合にスパイの場合はClassAをそのまま利用してmethodAだけ挙動を変えることができます。モックはClassAを模倣したMockClassAを作成してmethodAの振る舞いを設定します。そのためモックはmethodBに振る舞いを設定していない場合は何も実行されず、設定していないメソッドをテストで動かすとエラーになったります。スパイはClassAをそのまま使っているので、methodBに何も設定していない場合は実際のClassAのmethodBがそのまま動きます。

ダミーとは?

スタブというグループの中にダミーがいます。nullや固定文字列といったハードコーディングで値を返すことです。

スタブとは?

スタブというグループの中にスタブがいます。設定によって返す結果を変えることができます。例えば引数に3が来たら戻り値は10を返すような設定ができます。

フェイクとは

スタブというグループの中にフェイクがいます。依存を置き換えるために利用されます。FakeDaoのようにクラスごと置き換えられるイメージです。

Discussion