Тестирование статических классов с помощью PHPUnit - PullRequest
1 голос
/ 16 ноября 2009

У меня есть набор классов, которые я пытаюсь проверить. Класс A зависит от класса X. Класс X содержит функции, которые делают случайные вещи и вещи с базами данных. Я создал фиктивную версию класса X, которая возвращает именно то, что мне нужно, чтобы протестировать класс A без зависимостей.

Итак, мой вопрос: как мне теперь протестировать Class X, поскольку я уже включил макетную версию, которая имеет то же имя и имя файла. Я получаю сообщение об ошибке «Не удается переопределить класс X».

Я не думаю, что смогу использовать заглушки, поскольку нет способа передать заглушенный объект в мой тестируемый класс. Тестируемый класс (класс A) запросит экземпляр статического класса (ClassA :: getInstance ();).

Будет ли это как-то связано с наборами тестов или тестовыми примерами, поскольку я не могу отключить файл, содержащий пробную версию класса X.

Заранее спасибо за помощь,

Mike

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Вы не можете исключить файлы / классы в PHP, поэтому классы должны либо использовать разные имена, либо вам нужно их пространство имен. Что касается использования класса-заглушки, вы можете использовать два подхода: Используйте переменную instance / class, которая содержит зависимости, чтобы вы могли поменять их местами. Нравится

self::$_classes['classA']::methodCall();
$this->_classes['classA']::methodCall();

Это позволит вам изменять классовые зависимости во время выполнения, если вам действительно нужна статика. Другой подход состоит в том, чтобы не использовать статические классы и использовать зависимый контейнер для инъекций , подобный тому, который есть в компонентах Symfony. Контейнер для инъекций также позволит вам вводить макеты по мере необходимости.

0 голосов
/ 16 ноября 2009

нет способа передать заглушенный объект в мой тестируемый класс.

Это означает, что ваш класс A строго ссылается на класс X? Лично я бы рекомендовал переименовать ваш макет класса X в real макет (например, X_MockUp), поместить его в иерархию папок тестирования и затем передать его в класс A, который вы хотите протестировать. Это может быть невозможно в данный момент, но тогда измените свою архитектуру! Это будет более гибким и удобным для тестирования .

Вы получаете эту ошибку, поскольку у вас есть одно и то же имя класса в двух файлах, которые вы вынуждены различать.

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