如何在这种特定情况下编写unittest?或者它是一个糟糕的单位测试?

时间:2015-04-27 19:18:02

标签: php unit-testing phpunit

我有两个日期变量,如下所示:

$startDate = new \DateTime('2013-01-01');
$endDate = new \DateTime()->format(\DateTime::ISO8601);

如果计算两个日期之间的差异,则在每次测试运行时结果都会不同。所以,我不能使用任何常数来断言差异是正确的,但我的测试应确保在任何给定时间这两个日期之间的差异是完美的!

我怎样才能实现这一目标?任何意见或建议都会非常有益!干杯!

1 个答案:

答案 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");
}

希望这个帮助