You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8测试中Mocked方法未生效 调用返回原方法值问题

问题根因

Laravel 提供的partialMock/mock方法,本质是把配置好的mock对象绑定到服务容器中,只有当对应类是通过服务容器解析实例时,才会替换为mock对象。
你当前控制器代码里直接写$service = new Service()手动实例化类,完全绕过了服务容器的解析流程,实际调用的是原Service类的未mock实例,所以getNumber()还是返回原逻辑的100,和你mock配置的200无关。

修复方案

你只需要调整Service类的实例化方式,让它走服务容器解析即可,不需要修改现有测试代码,两种常用写法选其一就行:

  • 写法1:使用app()助手函数从容器解析实例
    修改控制器fetch方法代码:
class ServiceController extends Controller
{
    public function fetch(Request $request)
    {
        $service = app(Service::class);
    
        return [$service->getNumber()];
    }
}
  • 写法2:使用依赖注入(Laravel推荐的最佳实践)
    直接把Service类作为控制器方法的参数声明,Laravel会自动从容器解析对应实例注入:
class ServiceController extends Controller
{
    public function fetch(Request $request, Service $service)
    {
        return [$service->getNumber()];
    }
}

修改完成后重新运行测试,就会得到预期的[200]返回结果。

内容的提问来源于stack exchange,提问作者user1392897

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:57:18