Php 如何通过真实类调用非上下文场景中的mockry
鉴于这一类别:Php 如何通过真实类调用非上下文场景中的mockry,php,unit-testing,mockery,Php,Unit Testing,Mockery,鉴于这一类别: MyClass { public function getValueFrom($foo) { return 'data'; } } 我想用特定参数测试对函数getValueFrom的特定调用: $mock = Mockery::mock(MyClass); $mock->shouldReceive('getValueFrom') ->with('foo') ->once() ->and
MyClass
{
public function getValueFrom($foo)
{
return 'data';
}
}
我想用特定参数测试对函数getValueFrom
的特定调用:
$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
->with('foo')
->once()
->andReturn('bar');
(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // throws Mockery\Exception\NoMatchingExpectationException
如果我使用不同于“foo”的参数调用同一个方法,它将抛出NoMatchingExpectationException。如何将非上下文场景委托给真实类?令人担忧的行为是:
$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
->with('foo')
->once()
->andReturn('bar');
(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // return data
(new MyClass)->foo('anything-else'); // return data
为了防止评论错误,这将起到以下作用:
$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
->with('foo')
->once()
->andReturn('bar');
// here!!
$mock->shouldDeferMissing();
(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // return data
(new MyClass)->foo('anything-else'); // return data