我有两个日期变量,如下所示:
$startDate = new \DateTime('2013-01-01');
$endDate = new \DateTime()->format(\DateTime::ISO8601);
如果计算两个日期之间的差异,则在每次测试运行时结果都会不同。所以,我不能使用任何常数来断言差异是正确的,但我的测试应确保在任何给定时间这两个日期之间的差异是完美的!
我怎样才能实现这一目标?任何意见或建议都会非常有益!干杯!
答案 0 :(得分:3)
如果您的测试不依赖于系统时钟或其他类似的许可,您可以执行以下操作:假设有一个简单的函数来计算年份的年龄,您可以在函数中添加第二个参数如果没有设置当前日期,则默认为:
// DateRangeUtil
public static function getYearAge($registrationDate,$now = null)
{
if (!$now)
{
$now = new \DateTime('now');
}
return $now->diff($registrationDate)->format("%y");
}
// DateRangeUtilTest
public function testGetYearAge()
{
$bornDate = \Datetime::createFromFormat("d/m/Y H:i:s", "01/03/2014 00:00:00");
$today = \Datetime::createFromFormat("d/m/Y H:i:s", "01/06/2015 00:00:00");
$this->assertEquals(1, DateRangeUtil::getYearAge($bornDate, $today)," expect one year old");
}
希望这个帮助