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

Laravel使用Mockery创建模拟对象时传入构造参数Mock失效问题

问题原因

Laravel 内置的 $this->mock() 快捷测试方法,内部是通过 instance() 方法将模拟对象绑定到容器的,该绑定仅对无构造参数的 make() 调用生效。当你给 make() 传入构造参数时,容器会判定你需要基于传入参数生成全新实例,直接跳过已有实例绑定,走原生类的实例化流程,因此会返回原始的 CS_REST_Subscribers 类对象。

解决方案

你可以手动注册容器绑定,主动处理带参数的解析场景,不管传入什么构造参数都返回你创建的模拟对象即可:

// 先创建模拟对象
$mock = \Mockery::mock(\CS_REST_Subscribers::class, function (\Mockery\MockInterface $mockery) {
    $mockery->shouldReceive('add')->once();
});

// 手动绑定,不管传入什么参数都返回模拟对象
$this->app->bind(\CS_REST_Subscribers::class, function ($app, array $parameters) use ($mock) {
    // 如果需要根据传入的 parameters 做不同的模拟逻辑,可在这里自行扩展处理
    return $mock;
});

绑定完成后,无论你调用 make() 时是否传入构造参数,都会返回 Mockery 生成的模拟对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04