Mockery 是否克隆了 __get 方法?

问题描述 投票:0回答:1

我将 Laravel 9 与嘲笑/嘲笑版本 1.6.6 一起使用

当我嘲笑 Eloquent 模型时,我有一些奇怪的行为。

雄辩模型有一个

__get()
方法定义为:

    public function __get($key)
    {
        return $this->getAttribute($key);
    }

以我的理解,嘲讽不应该意识到这一点。

但是,以下测试失败:

$user = Mockery::mock(User::class);
$user->abasdasd

与:

Mockery\Exception\BadMethodCallException:已收到 Mockery_1_App_User::getAttribute(),但未指定期望 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:2222 /var/www/html/tests/Unit/Services/Bill/TextGenerator/RegistrationInvoiceTextTest.php:29

当我尝试访问属性时,似乎在我的模拟对象上调用了“getAttribute”。这是为什么?

__get()
方法实际上是从应该被模拟的类继承的吗?

php mockery
1个回答
0
投票

它没有详细记录,但看起来就像访问魔法属性代理调用真正的魔法方法通过设计

强烈建议单元测试和模拟对象不要直接引用魔术方法。相反,仅引用这些魔术方法模拟的虚拟方法和属性。 [...] 遵循这条建议将确保我们正在测试类的真正 API。

© www.soinside.com 2019 - 2024. All rights reserved.