Подтвердить что ты не робот

Создание Mock-объекта интерфейса с типом-подсказкой в ​​методе не выполняется на PHPUnit

Я создал следующий интерфейс:

<?php
interface Action
{
    public function execute(\requests\Request $request, array $params);
}

Затем я пытаюсь сделать объект Mock этого интерфейса с PHPUnit 3.4, но я получаю следующую ошибку:

Неустранимая ошибка: объявление Mock_Action_b389c0b1:: execute() должно быть совместимо с объявлением Action:: execute() в D:\Xampp\xampp\php\PEAR\PHPUnit\Framework\TestCase.php(1121): eval() 'd в строке 2

Я просмотрел трассировку стека, полученную из PHPUnit, и обнаружил, что он создает объект Mock, который реализует интерфейс Action, но создает метод execute следующим образом:

<?php
public function execute($request, array $params)

Как вы можете видеть, PHPUnit берет на себя тип массива-подсказки, но забывает о\запросах\Запрос. Это, очевидно, приводит к ошибке. Кто-нибудь знает обходной путь для этой ошибки?

Я также пробовал его без пространств имен, но я все равно получаю ту же ошибку.

4b9b3361

Ответ 1

Возможно, немного поздно.

У меня была такая же проблема, и оказалось, что намеченный тип не был загружен и не загружался. В результате PHP ReflectionParameter не возвращает имя класса, а генератор макета PHPUnit не включает его.

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