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

时间:2017-11-21 21:06:35

标签: phpunit mockery

我想创建一个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名称比这个例子长得多。)

2 个答案:

答案 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()的调用推迟到真实对象,根据参数返回truefalse - 这显然不会做同样的事情问题中的代码确实如此,但它在我的场景中确实有效,并且它的时间非常短。