php - 嘲弄“with”方法没有显示失败的原因
问题描述
我在with
模拟上使用方法以断言该方法是以对象作为参数调用的
Mockery::mock(PaymentRepository::class)
->shouldReceive('removeTripPayments')
->with($trip)
->mock();
哪个失败了,我仍然不知道为什么,但我最关心的是这是否是检查它的正确方法,以及是否有可能显示预期参数与给定参数的不同之处。
1) PaymentServiceTest::test_removing_payments
Mockery\Exception\NoMatchingExpectationException: No matching handler found for Mockery_0_PaymentRepository::removeTripPayments(object(Trip)). Either the method was unexpected or its arguments matched no expected argument list for this method
Objects: ( array (
'MyNamespace\Trip' =>
array (
'class' => 'MyNamespace\\Trip',
'properties' =>
array (
),
),
))
解决方案
当您将对象作为参数传递给方法时,在这种情况下,您正在传递对象(Trip),然后 PHPUnit 变得疯狂。我一直有这个问题,你有两个解决方案,第一个使用 Mockery::on();
->with(Mockery::on(function($Param){
$this->assertEqual(get_class($Param), get_class(Trip));
return true;
}))
如您所见,PHPUnit 无法完全比较两个对象,因此您需要比较部分对象,在这种情况下,我使用 get_clas 来检查类的名称。第二种解决方案可能是使用
->andReturnUsing(function($param){
$this->assertEqual(get_class($Param), get_class(Trip));
return true; // Expected response
});
也许这对你有帮助。
推荐阅读
- python - 使用 pandas 将 df 写入 sqlite
- node.js - Docker:最后的节点高山映像是否比完整节点映像小?
- javascript - `~` 符号在 javascript 中的作用是什么?
- python - 基于标签的颜色散点图
- python - TypeError:“列表”对象不可调用但在 IDLE 中有效
- sorting - 按指定字段对结构切片进行排序
- java - 调用依赖微服务
- c# - 通过接口c#传递自定义数据
- javascript - 从 PerformanceEntry API 估计带宽
- android - 是否可以手动让新的 ImageDecoder 类一帧一帧地返回位图?