LoginSignup
2

More than 5 years have passed since last update.

モックでメソッド呼び出し時の引数を厳密にテストする

Posted at

PhpUnit の Mock を使って引数の内容をテストするとき、
曖昧比較 (==) でテストするなら equalTo() を使うが
厳密比較 (===) でテストしたい場合は identicalTo() を使う。

最初 assertSame() のように sameTo() 的なメソッド名を想像していて中々見つけられなかったのでメモ。

e.g.

例として渡された二つの引数の引き算を行い、その結果を返す subtract() メソッドがあり
そのメソッドに渡される引数の内容をテストしたいとする。

試しに with() を使って引数に 5 と 3 が渡されることをテストしてみる。
以下のようにequalTo() を使った曖昧比較の場合は、引数に文字列型を渡しても成功する。

$mock = $this->createMock(Something::class);
$mock->method('subtract')
    ->with($this->equalTo(5), $this->equalTo(3))
    ->will($this->returnValue(2));

// 成功
$mock->subtract("5", "3")

identicalTo() を使って厳密比較にすると引数に int 型以外の値が渡された場合はエラーになる。

$mock = $this->createMock(Something::class);
$mock->method('subtract')
    ->with($this->identicalTo(5), $this->identicalTo(3))
    ->will($this->returnValue(2));

// 失敗!
$mock->subtract("5", "3")

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
2