我试图声明一个期望,它有两个可能的值作为参数,基于我希望返回值不同的值。
这是我试过的
$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
但这与我尝试的相同,它强制对参数类型进行验证。
答案 0 :(得分:0)
好的,我找到了答案
$mock->shouldReceive('has')->withArgs(['foo'])->andReturnValues([false]);
$mock->shouldReceive('has')->withArgs(['bar'])->andReturnValues([true]);
因为withArgs
只是with
的包装,我认为也可以使用with
,但我认为param必须在数组中