I am using Laravel 9 together with mockery/mockery version 1.6.6
I have some strange behavior when I mock an Eloquent model.
The eloquent Model has a __get() method defined as :
public function __get($key)
{
return $this->getAttribute($key);
}
In my understanding, the mockery should not be aware of it.
However, the following test fails:
$user = Mockery::mock(User::class);
$user->abasdasd
with:
Mockery\Exception\BadMethodCallException : Received Mockery_1_App_User::getAttribute(), but no expectations were specified /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:2222 /var/www/html/tests/Unit/Services/Bill/TextGenerator/RegistrationInvoiceTextTest.php:29
IT seems that "getAttribute" is called on my mock object when I try to access a property. Why is that? Is the __get() method actually inherited from the class that should be mocked?
It's not well-documented but it seems, like accessing magic properties proxies calls to the real magic methods by design: