【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