Posted at

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

More than 1 year has passed since last update.

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