Создание фиктивного объекта интерфейса с подсказкой типа в методе завершается неудачно в PHPUnit - PullRequest
18 голосов
/ 31 января 2010

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

<?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 () код в строке 2

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

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

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

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

1 Ответ

25 голосов
/ 17 марта 2010

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

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

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

...