gpt4 book ai didi

php - 为引用 time() 的方法编写测试

转载 作者:行者123 更新时间:2023-12-04 05:22:54 24 4
gpt4 key购买 nike

我刚刚开始使用 PHPUnit 进行单元测试,并且正在使用一些简单的方法来感受它。一个例子立即令人费解:

function setDelay($seconds)
{
if($seconds == 0)
{
$this->delay = 0;
}
else
{
$this->delay = time() + $seconds;
}
}

当 time() 在方法之外未知时,我将如何确定正确的预期结果? :
public function testSetDelayNonZero() {
$expected = [??];
$this->class->setDelay(100);
$actual = $this->class->delay;
$this->assertEquals($expected, $actual);
}

最佳答案

将时间相关代码提取到单独的类是最佳选择。

然而,有时它似乎有点矫枉过正。在其他语言中,可以全局设置时间,例如DateTimeUtils.setCurrentMillisFixed in java 或 delorean在 ruby 中。

在 php 中,您必须使用 DateTime 的替代品,例如Clock来自 ouzo goodies

然后在你的代码中使用:

$time = Clock::now();

在您的测试中:
//given
Clock::freeze('2011-01-02 12:34');

//when
$result = YourCode::doSomethingWithTimeReturnedByClockNow();

//then
$this->assertEquals('2011-01-02', $result);

关于php - 为引用 time() 的方法编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com