在PHPUnit(3.7.22)中测试DateTime对象时,我正在做这样的断言:
$this->assertEquals(date_create('2014-01-01'), $myobject->getDate());
很好地工作直到你得到一个异常,并且异常不够清楚(例如对于那些明显表示例如1不等于例外2的原语)。
PHPUnit_Framework_ExpectationFailedException : Failed asserting that two objects are equal.
我可以将$message
参数传递给assertEquals
方法,并使用包含对象值的字符串,但我觉得它可以更容易。
有什么想法吗?
答案 0 :(得分:1)
您可以执行类似
的操作$expected_date = new DateTime('2014-01-01');
$this->assertEquals($expected_date->format('Y-m-d'), $myobject->getDate()->format('Y-m-d');
这会让你的错误消息说“失败断言'2014-02-03匹配预期2014-01-01'
答案 1 :(得分:1)
我在phpUnit源代码中捅了一下,并没有看到任何钩子以便更好地显示。我通常做的就是你在问题中已经提到的内容:
$this->assertEquals(date_create('2014-01-01'), $myobject->getDate(), print_r($myobject,true) );
OR:
$this->assertEquals(date_create('2014-01-01'), $myobject->getDate(), print_r($myobject->getDate(),true) );
取决于哪个更有用,具体情况。
无论如何我这样做,因为我经常想在消息中包含其他有用的数据,也许是之前的一些计算,以给它上下文。即要知道测试失败的原因我经常需要了解的不仅仅是应该相同的两个对象。