我将 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()
方法实际上是从应该被模拟的类继承的吗?
它没有详细记录,但看起来就像访问魔法属性代理调用真正的魔法方法通过设计:
强烈建议单元测试和模拟对象不要直接引用魔术方法。相反,仅引用这些魔术方法模拟的虚拟方法和属性。 [...] 遵循这条建议将确保我们正在测试类的真正 API。