我正在尝试测试以下方法:
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(),但没有指定期望”)。
有人可以解释一下这是如何工作的吗?
您正在尝试模拟
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);
}