首页 > 解决方案 > 如何在服务容器测试中注册模拟对象

问题描述

我需要向服务容器注册一个对象。
我尝试使用以下代码,但我得到了

错误调用未定义的方法 ::process()

$o = $this->instance(Service::class, Mockery::mock(Service::class, function ($mock) {
   $mock->shouldReceive('process')->once()->andReturn(10);
}));

$this->app->instance(Service::class, $o);

dd((new Service())->process());

标签: laravelmockingphpunit

解决方案


首先对于模拟一个对象,这应该足够了。不需要中间步骤。

$this->instance(Service::class, Mockery::mock(Service::class, function ($mock) {
   $mock->shouldReceive('process')->once()->andReturn(10);
}));

要加载模拟,您必须通过容器将其取出,您最近已将其与容器绑定。有很多方法可以做到这一点$this->app->instance(),,,app()等等resolve()

dd($this->app->instance(Service::class)->process());

推荐阅读