例えば API を呼び出すメソッドをテストするケースなど、同一メソッドを異なる引数で複数回呼び出したい場合。PHP の OSS のモックフレームワークの Phake で実現する方法を説明します。
説明の前提条件
- モックを適用する対象は、
API
クラスのrequest()
メソッドとします。 -
request()
メソッドの引数には、任意の値を指定できることとします。
1. メソッドの戻り値を、呼び出し毎に変更する
thenReturn()
メソッドを連続して呼び出すことで、実現することができます。
$mock = Phake::mock('API');
// 引数が毎回異なる前提なので、Phake::anyParameters() メソッドを使用しています。
// また、戻り値の変数 $return1-3 は、予め定義してあるものとします。
Phake::when($mock)->request(Phake::anyParameters())
->thenReturn($return1)
->thenReturn($return2)
->thenReturn($return3);
// request() メソッドがキチンと3回呼び出せていることの検証です。
Phake::verify($mock, Phake::times(3))->request(Phake::anyParameters());
2. メソッドの引数を検証する
Phake::capture()
メソッドを呼び出すことで、実現することができます。
// Phake::capture() の引数 $params に、メソッドの引数が配列でセットされます。
Phake::verify($mock)->request(Phake::capture($params));
// 1回目の呼び出し時の引数を取得・検証する例です。
$param1 = $params[0];
$this->assertEquals('foo', $param1);
参考資料
- Phake の GitHub リポジトリ
- Phake の公式ドキュメント(英語)
-
Phake.php
- Phake の提供しているメソッド一覧を調べたい場合にどうぞ。
-
PhakeTest.php
- 公式ドキュメントだけでは分かりづらい、Phake の提供しているメソッドの具体的な使い方が提示されているため、非常に有益です。