Предпосылка
Я знаю, что написание кода, действующего по-разному во время выполнения теста, - это очень плохая практика, но, возможно, я действительно сталкивался со сценарием, в котором это может быть необходимо.
В частности, я пытаюсь протестировать очень специфическую оболочку для HTML Purifier в среде Zend - а точнее View Helper. Автозагрузчик HTML Purifier необходим, потому что он использует логику, отличную от тех автозагрузчиков, которые у нас есть.
Проблема
require () -ing автозагрузчик в верхней части моего класса View Helper, дает мне следующее в тестовой области действия :
Регистратор автозагрузчика HTML Purifier не совместим
с нестатическими объектными методами из-за PHP Ошибка # 44144;
Пожалуйста, не используйте HTMLPurifier.autoload.php (или любой другой
файл, который включает этот файл); вместо этого поместите код:
spl_autoload_register (массив ('HTMLPurifier_Bootstrap', 'автозагрузка'))
после ваших собственных автозагрузчиков.
Замена require () на spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'))
как объявлено означает, что тест проходит нормально, но View Helper умирает ужасной смертью, заявляя:
Zend_Log [3707]: ErrorController перехватил LogicException «Пропущенный массив не указывает существующий статический метод (класс 'HTMLPurifier_Bootstrap' не найден)"
(Наша структура папок для тестирования немного отличается от нашей структуры папок Zend по необходимости.)
Вопрос (ы)
После работы с ним, я думаю, мне нужно будет выбрать загрузку автозагрузчика в зависимости от того, находятся ли объекты в тестовой области или нет.
Есть ли у меня еще один вариант включения процедуры автозагрузки HTMLPurifier в обоих случаях, которые я не вижу из-за туннельного зрения?
Если нет, то должен ли я найти способ различать тестовую среду и производственную среду с помощью моего собственного кода (например, APPLICATION_ENV) - или PHPUnit поддерживает эту чудовищную мою хакерскую установку, устанавливая константу что я мог проверить, было ли это определено () , или подобные махинации? (Мой Google-фу здесь слабый! Я, вероятно, просто делаю это неправильно.)