gpt4 book ai didi

php - 使用 Symfony PHPUnit 桥 ClockMock 设置日期/时间

转载 作者:行者123 更新时间:2023-12-02 00:20:48 24 4
gpt4 key购买 nike

我不知道如何设置 ClockMock 类使用的日期/时间。在文档中:

Additionally the function date() is mocked so it uses the mocked time if no timestamp is specified. Other functions with an optional timestamp parameter that defaults to time() will still use the system time instead of the mocked time.

这是我试图做的:

class Foo
{
public function now(): string {
return date('Y-m-d');
}
}


/**
* @covers Foo
* @group time-sensitive
*/
class FooTest extends TestCase
{
/**
* @covers Foo::now
*/
public function testNow(): void {
ClockMock::register(Foo::class);
ClockMock::withClockMock('2019-01-01');

$f = new Foo();
static::assertSame('2019-01-01', $f->now());
}
}

断言仍然失败,实际日期是今天的日期。

我什至尝试在测试类的断言中调用 date('Y-m-d') 但它仍然返回今天的日期而不是模拟日期。

如何设置模拟日期?

最佳答案

根据源代码 ( https://github.com/symfony/symfony/blob/4.2/src/Symfony/Bridge/PhpUnit/ClockMock.php#L28 ) ClockMock::withClockMock() 的参数期望作为其第一个参数的数字(由 is_numeric 检查,转换为float) 并将其用作时间戳。如果不是数字,它将使用当前微时间作为时间戳。

所以你的代码可能应该是:

ClockMock::withClockMock(date_create('2019-01-01')->getTimestamp());

关于php - 使用 Symfony PHPUnit 桥 ClockMock 设置日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55437106/

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