Частичное тестирование PHP Mockery дважды не вызывает метод из родительского класса - PullRequest
0 голосов
/ 05 марта 2019

Я запутался, почему мой частичный тест double не вызывает метод правильно.Это мои классы:

abstract class Model
{
    public function update(array $attributes) {
        $this->performUpdate($attributes);
    }

    abstract protected function performUpdate(array $attributes);
}

class Product extends Model
{
    protected function performUpdate(array $attributes)
    {
        print_r($attributes);
    }
}

$mock = Mockery::mock(Product::class)->makePartial();

$mock->update([]); // the 'performUpdate' method never gets called

Когда код выполняется, performUpdate в классе Product никогда не вызывается.Метод 'update' вызывается, как и ожидалось, но реальный метод performUpdate никогда не вызывается.Вместо этого он просто возвращает ноль, как если бы он не был частичным макетом.Предполагается, что частичные mock-ы откладываются на метод в mocked-классе, если ожидание не установлено, так почему мой метод не вызывается?

1 Ответ

0 голосов
/ 06 марта 2019

Вы должны использовать shouldAllowMockingProtectedMethods при создании макета.Это решит проблему того, что вы не видите вывод.

...