PHP テスト モックについて

taisablog.com


テストダブルとは

一般的には「モック」という言い方が浸透していると思いますが、
これは広義・狭義両方あり、
広義のほうには「テストダブル」という総称があります。


テストダブルとは、
テスト対象が依存しているオブジェクトや関数を、
テスト側で置き換えるために使用するオブジェクトのことです。

テストダブルを使うことで、
テスト対象内で呼ばれているメソッドを決まった値が返るように作り変えたり、
重い処理を置き換えて実行速度を速めたりすることができます。


テストダブルの種類については、「xUnit Test Patterns: Refactoring Test Code」(Gerard Meszaros 著)では以下のように定義されています(抄訳)。

  • テストスタブ:
    実際のオブジェクトをテストで定義したオブジェクトに置き換え、テスト対象に間接的な入力を提供する
  • テストスパイ:
    テスト対象から他のコンポーネントへ渡される間接的な出力を捕捉する
  • モックオブジェクト:
    テスト対象内で正しく使われているかどうかを検証するために、
    実際のオブジェクトをテストで定義したオブジェクトに置き換える
  • フェイクオブジェクト:
    実際のオブジェクトよりも簡素な作りにしたオブジェクトで置き換える
  • ダミーオブジェクト: テスト対象のメソッド呼び出しには関係ないが、テストを実行するために必要なオブジェクトを実装のないクラスで置き換える


Laravel でのモックの使い方

  1. Mockery を直接使う

  2. Laravel 経由で使う