在PHPUnit中测试DateTime对象时可读的异常信息

在PHPUnit中测试DateTime对象时可读的异常信息,phpunit,Phpunit,在PHPUnit(3.7.22)中测试DateTime对象时,我的断言如下: $this->assertEquals(date_create('2014-01-01'), $myobject->getDate()); 直到您得到一个异常,并且中的异常不够清晰(例如,对于原语,is清楚地表明,例如,1不等于被异常的2) 我可以用一个包含对象值的字符串将$message参数传递给assertEquals方法,但我觉得这样做会更简单 有什么想法吗?你可以这样做 $expected_dat

在PHPUnit(3.7.22)中测试DateTime对象时,我的断言如下:

$this->assertEquals(date_create('2014-01-01'), $myobject->getDate());
直到您得到一个异常,并且中的异常不够清晰(例如,对于原语,is清楚地表明,例如,1不等于被异常的2)

我可以用一个包含对象值的字符串将
$message
参数传递给
assertEquals
方法,但我觉得这样做会更简单


有什么想法吗?

你可以这样做

$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匹配”

我在phpUnit源周围进行了一次检查,没有看到任何钩子可以更好地显示。我通常做的是您在问题中已经提到的:

$this->assertEquals(date_create('2014-01-01'), $myobject->getDate(), print_r($myobject,true) );
或:

根据具体情况,哪一个更有用

不管怎样,我还是会这样做,因为我经常想在消息中包含其他有用的数据,可能是一些以前的计算,以提供上下文。例如,要知道测试失败的原因,我通常需要知道的不仅仅是两个应该相等的对象

$this->assertEquals(date_create('2014-01-01'), $myobject->getDate(), print_r($myobject,true) );
$this->assertEquals(date_create('2014-01-01'), $myobject->getDate(), print_r($myobject->getDate(),true) );