Phpunit 为mockry中的特定参数指定期望返回值的最短方法

Phpunit 为mockry中的特定参数指定期望返回值的最短方法,phpunit,mockery,Phpunit,Mockery,我想创建一个Mock,其方法应该为特定参数返回true,为任何其他参数返回false 我可以通过以下方式实现这一目标: $this->myMock = Mockery::mock(MyClass::class); $this->myMock->shouldReceive('myMethod')->with('my-argument')->andReturn(true); $this->myMock->shouldReceive('myMethod')-&

我想创建一个
Mock
,其方法应该为特定参数返回
true
,为任何其他参数返回
false

我可以通过以下方式实现这一目标:

$this->myMock = Mockery::mock(MyClass::class);
$this->myMock->shouldReceive('myMethod')->with('my-argument')->andReturn(true);
$this->myMock->shouldReceive('myMethod')->andReturn(false);

但是我想知道是否有更简短的方法来指定它,因为我必须为许多mock这样做,并且看起来有很多代码用于这个简单的目的(注意我的属性/类/方法/参数名称比这个示例长)。

您可以使用mockry的
和returnusing
-方法。它使用闭包通过计算提供的参数来计算返回值。应该像这样工作:

$this->mock
    ->shouldReceive('myMethod')
    ->andReturnUsing(function ($argument) {
        if ($argument) {
            return true;
        }

        return false;
    });

我发现我可以使用:

$this->myMock = Mockery::mock(MyClass::class);
$this->myMock->shouldReceive('myMethod')->passthru();
这会将对
myMethod()
的调用推迟到真实对象,该对象将根据参数返回
true
false
——这显然与问题中的代码所做的事情不同,但它在我的场景中确实起作用,而且非常短