LoginSignup
1
2

More than 5 years have passed since last update.

PHP & Phake で同一メソッドが異なる引数で複数回呼び出されるケースをテストする方法

Last updated at Posted at 2016-03-19

例えば 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);

参考資料

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2