Mockery为期望定义多个可能的值

时间:2016-04-08 04:20:56

标签: php mockery

我试图声明一个期望,它有两个可能的值作为参数,基于我希望返回值不同的值。

这是我试过的

$mock = m::mock('FooBar\ClassA');
$mock->shouldReceive('has')->with('foo')->andReturn(false);
$mock->shouldReceive('has')->with('bar')->andReturn(true);

我收到此错误

  

Mockery \ Exception \ NoMatchingExpectationException:没有匹配的处理程序   找到了Mockery_2__FooBar_ClassA :: has(" bar")

我通读了http://docs.mockery.io/en/latest/reference/expectations.html

但我无法找到答案。我试图用andReturnUsing解决问题,这是直截了当的。有没有办法在不使用andReturnUsing的情况下解决问题?

$mock->shouldReceive('has')->andReturnUsing(function ($value) {
    switch ($value) {
    case 'foo': return false;
    case 'bar': return true;
    }
});

我还阅读了Mockery specifying expected arguments for multiple calls

但这与我尝试的相同,它强制对参数类型进行验证。

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案

$mock->shouldReceive('has')->withArgs(['foo'])->andReturnValues([false]);
$mock->shouldReceive('has')->withArgs(['bar'])->andReturnValues([true]);

因为withArgs只是with的包装,我认为也可以使用with,但我认为param必须在数组中