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