PHPUnit - MockBuilder :: enableProxyingToOriginalMethods () прерывается, когда оригинальный конструктор вызывает открытый метод - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь написать модульный тест, который включает в себя макетирование класса, конструктор которого вызывает несколько открытых методов.Указанные публичные методы не могут быть сделаны приватными, по крайней мере, на данный момент.В этом же классе есть магические методы, которые я хочу оставить без изменений (__get / __ set / __ isset), поэтому я прибег к использованию enableProxyingToOriginalMethods() - я не нашел способа включить только эти три исходных метода (источник здесь: PHPUnit - вызов родительского __get / __set / __ isset ).Это заставляет магические методы работать, но это ломает конструктор.

Следующий код демонстрирует проблему:

<?php
use PHPUnit\Framework\TestCase;

class ExceptionTestCase extends TestCase
{
    public function testException()
    {
        $this->expectException(TypeError::class);
        $this->expectExceptionMessage('call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object');
        $this->getMockBuilder(Foo::class)
            ->enableProxyingToOriginalMethods()
            ->getMock();
    }
}

class Foo
{
    public function __construct()
    {
        $this->setBar();
    }

    public function setBar()
    {
    }
}

Я ожидал бы, что это просто сработает, поскольку абсолютно ничего изобычный здесь, и все же он ломается без видимой причины.Если видимость публичного метода установлена ​​на частный, тогда он работает, как и ожидалось, но я не могу сделать это в реальном коде.

Как исправить эту ошибку, не касаясь упомянутых публичных методов?Я пропустил некоторые настройки MockBuilder?

1 Ответ

0 голосов
/ 27 сентября 2019

Тестовые прокси , к которым относится enableProxyingToOriginalMethods(), решают проблему, которая, вероятно, не ваша.И для решения этой проблемы конструктор должен быть выполнен со всеми необходимыми аргументами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...