我想创建一个Mock
,其方法应该为特定参数返回true
,并为任何其他参数返回false
。
我可以通过以下方式实现这一目标:
$this->myMock = Mockery::mock(MyClass::class);
$this->myMock->shouldReceive('myMethod')->with('my-argument')->andReturn(true);
$this->myMock->shouldReceive('myMethod')->andReturn(false);
但是我想知道是否有更短的方法来指定它,因为我必须为许多模拟执行此操作,并且为了这个简单的目的看起来像很多代码(请注意我的属性/类/ methods / arguments名称比这个例子长得多。)
答案 0 :(得分:1)
您可以使用Mockery的andReturnUsing
方法。通过评估提供的参数来计算返回值需要一个闭包。应该像:
$this->mock
->shouldReceive('myMethod')
->andReturnUsing(function ($argument) {
if ($argument) {
return true;
}
return false;
});
答案 1 :(得分:0)
我发现我可以使用:
$this->myMock = Mockery::mock(MyClass::class);
$this->myMock->shouldReceive('myMethod')->passthru();
这会将对myMethod()
的调用推迟到真实对象,根据参数返回true
或false
- 这显然不会做同样的事情问题中的代码确实如此,但它在我的场景中确实有效,并且它的时间非常短。