せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【PHPUnit】assertEquals が全然equal ではない件

assertEquals を使って素朴にassert文を書いていたら、罠でした。

assertEquals は「オブジェクトの参照先が同じ」の意味ではない

$dm1 = new DbManager();
$dm2 = new DbManager();
$this->assertEquals($dm1, $dm2);

⇒OK (1 tests, 1 assertions)

ええっ・・・。OKちゃいますやん。。。



「オブジェクトの参照先が同じ」はassertSame を使う

$dm1 = new DbManager();
$dm2 = new DbManager();
$this->assertSame($dm1, $dm2);

⇒Failed asserting that two variables reference the same object.
C:\xampp\htdocs\application\tests\core\DbManagerTest.php:52
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

よしよし。


assertEquals は属性値の一致だけを確認する

assertEquals(object $expected, object $actual[, string $message = ''])

2 つのオブジェクト $expected と $actual が同じ属性値を持たない場合にエラー $message を報告します。

 

http://phpunit.de/manual/3.6/ja/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.assertEquals