模拟 class 不接受 Carbon 实例
Mocked class not accepting instance of Carbon
我正在尝试使用 PhpUnit 和 Mockery 测试一个方法。在指定应使用参数调用方法的过程中,我的测试失败了。
测试:
$this->eventRepo = \Mockery::mock('Path\To\EventRepository');
$start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-21-00');
$end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-19-00');
$this->eventRepo
->shouldReceive('findEvent')
->withArgs([
$start,
$end,
'1',
'1234567891'
])
->andReturn($callEvent);
真实代码:
$start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');
$end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');
$event = $this->eventRepo->findEvent(
$start->subSeconds(60),
$end->addSeconds(60),
$id,
$number
);
测试错误:
Mockery\Exception\NoMatchingExpectationException: No matching handler found for EventRepo::findEvent(object(Carbon\Carbon), object(Carbon\Carbon), "1", "1234567891"). Either the method was unexpected or its arguments matched no expected argument list for this method
$this->eventRepo
是测试中的模拟。真正的代码运行正确。错误显示后,我猜 var_dump() 是 Carbon 的一个实例。
我不知道是什么原因造成的。我试着用谷歌搜索它,但不知道 google 是什么让它变得一文不值。有人遇到过这个吗?
当使用 with()
或 withArgs()
中的对象时,phpunit 执行 ===
检查。这意味着它将寻找完全相同的 class 实例,而不仅仅是 Carbon 的任何实例。
在这种情况下,这意味着 findEvent()
正在接收 Carbon
的实例,但与实际代码中的实例不完全相同。
我正在尝试使用 PhpUnit 和 Mockery 测试一个方法。在指定应使用参数调用方法的过程中,我的测试失败了。
测试:
$this->eventRepo = \Mockery::mock('Path\To\EventRepository');
$start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-21-00');
$end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-19-00');
$this->eventRepo
->shouldReceive('findEvent')
->withArgs([
$start,
$end,
'1',
'1234567891'
])
->andReturn($callEvent);
真实代码:
$start = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');
$end = Carbon::createFromFormat('Ymd-H-i-s', '20141211-09-20-00');
$event = $this->eventRepo->findEvent(
$start->subSeconds(60),
$end->addSeconds(60),
$id,
$number
);
测试错误:
Mockery\Exception\NoMatchingExpectationException: No matching handler found for EventRepo::findEvent(object(Carbon\Carbon), object(Carbon\Carbon), "1", "1234567891"). Either the method was unexpected or its arguments matched no expected argument list for this method
$this->eventRepo
是测试中的模拟。真正的代码运行正确。错误显示后,我猜 var_dump() 是 Carbon 的一个实例。
我不知道是什么原因造成的。我试着用谷歌搜索它,但不知道 google 是什么让它变得一文不值。有人遇到过这个吗?
当使用 with()
或 withArgs()
中的对象时,phpunit 执行 ===
检查。这意味着它将寻找完全相同的 class 实例,而不仅仅是 Carbon 的任何实例。
在这种情况下,这意味着 findEvent()
正在接收 Carbon
的实例,但与实际代码中的实例不完全相同。