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")