Mockery 如何与 php 中的时间戳一起工作?

问题描述 投票:0回答:1

我正在尝试测试以下方法:

 public function currentTimePlus($seconds)
    {
        $resultDateTime = $this->dateTime->getTimestamp() + $seconds;
        return $resultDateTime;
    }

这就是我现在拥有的:

  public function testCurrentTimePlus()
    {
        $mock = Mocker::mock(Calculator::class);
        $mock->currentTimePlus('getTimestamp')->once()->andReturn(1660338149);
        $calculator = new Calculator(new RandomGenerator(), $mock);

        $result = $calculator->$this->seconds(300);

        $this->assertEquals(1660338449, $result);
    }

显然它不起作用(错误是:“收到Mockery_0_Calculator::currentTimePlus(),但没有指定期望”)。

有人可以解释一下这是如何工作的吗?

php unit-testing datetime mocking
1个回答
0
投票

您正在尝试模拟

currentTimePlus
方法,但似乎您没有正确设置它。您应该模拟
getTimestamp
对象的
dateTime
方法,而不是
currentTimePlus
类的
Calculator
方法。

public function testCurrentTimePlus()
{
    // Mock the DateTime class
    $dateTimeMock = Mockery::mock(DateTime::class);
    $dateTimeMock->shouldReceive('getTimestamp')->once()->andReturn(1660338149);

    // Pass the mock object to the Calculator class
    $calculator = new Calculator($dateTimeMock);

    $result = $calculator->currentTimePlus(300);

    $this->assertEquals(1660338449, $result);
}
© www.soinside.com 2019 - 2024. All rights reserved.