Laravel 8 模拟对象
当模拟一个对象将通过 Laravel 的服务容器注入到应用中时,你将需要将模拟实例作为 instance
绑定到容器中。这将告诉容器使用对象的模拟实例,而不是构造对象的真身:
use App\Service;
use Mockery;
$this->instance(Service::class, Mockery::mock(Service::class, function ($mock) {
$mock->shouldReceive('process')->once();
}));
为了让以上过程更加便捷,你可以使用 Laravel 的基本测试用例类提供 mock
方法:
use App\Service;
$this->mock(Service::class, function ($mock) {
$mock->shouldReceive('process')->once();
});
当你只需要模拟对象的几个方法时,可以使用 partialMock
方法。 未被模拟的方法将在调用时正常执行:
use App\Service;
$this->partialMock(Service::class, function ($mock) {
$mock->shouldReceive('process')->once();
});
同样,如果你想侦查一个对象,Laravel 的基本测试用例类提供了一个便捷的 spy
方法作为 Mockery::spy
的替代方法:
use App\Service;
$this->spy(Service::class, function ($mock) {
$mock->shouldHaveReceived('process');
});