錯誤寫法
$mock = Mockery::mock(MyClass::class) ->shouldReceive('foo') ->once() ->with($arg) ->andReturn($returnValue);
Mockery::mock(MyClass::class) 返回的是 \Mockery\MockInterface
而后面的幾個方法都是 \Mockery\Expectation 里面的方法。
最后我們調用 mock 實例的方法時需要的是 \Mockery\MockInterface,而不是 \Mockery\Expectation , 所以正確的寫法如下:
$mock = Mockery::mock(MyClass::class); $mock->shouldReceive('foo') ->once() ->with($arg) ->andReturn($returnValue); var_dump($mock->foo(3) === 5);
又或者在第一種寫法后面 $mock->getMock()->foo(3) 這樣獲取 mock 實例。