sfYaml echoln () ошибка в проекте Zend Framework Тесты PHPUnit - PullRequest
0 голосов
/ 03 февраля 2011

Я запускаю проект Zend Framework и решил использовать Doctrine 1.2.3 вместо классов Zend_Db. Я настроил свой проект, и сценарий командной строки doctrine работает нормально, мой контроллер индекса может без проблем запрашивать мою базу данных, но модульные тесты с PHPUnit выдают ошибку:

Fatal error: Cannot redeclare echoln() (previously declared in D:\Zend\Apache2\vhost\myproject\library\Doctrine\Parser\sfYaml\sfYaml.php:132) in D:\Zend\ZendServer\bin\PEAR\SymfonyComponents\YAML\sfYaml.php on line 135

Я использую Zend Server с PHP 5.3. Для PHPUnit требуется пакет YAML для PEAR SymfonyComponents. Это происходит каждый раз, когда мой модуль начальной загрузки пытается заново создать и загрузить всю базу данных тестирования, особенно при загрузке файлов фикстур. Это полная команда и вывод:

D:\Zend\Apache2\vhost\myproject\tests>phpunit
build-all-reload - Successfully dropped database for connection named 'doctrine'
build-all-reload - Successfully created database for connection named 'doctrine'
build-all-reload - Created tables successfully
build-all-reload - Data was successfully loaded
PHPUnit 3.5.10 by Sebastian Bergmann.


Fatal error: Cannot redeclare echoln() (previously declared in D:\Zend\Apache2\vhost\myproject\library\Doctrine\Parser\sfYaml\sfYaml.php:132) in D:\Zend\ZendServer\bin\PEAR\SymfonyComponents\YAML\sfYaml.php on line 135

D:\Zend\Apache2\vhost\myproject\tests>

В результате моя база данных полностью создана и данные успешно загружены. Но эта ошибка останавливает процесс модульного тестирования. У меня есть только один тестовый класс для моделей Doctrine, но эта ошибка происходит, даже если я комментирую его тестовый код.

Это странно, потому что, если я выполняю сценарий доктрины вручную, он запускается без проблем, и при работе системы через Интернет не возникает никаких ошибок. Это просто происходит для модульного тестирования.

Как можно избежать этого конфликта библиотек, если и Doctrine, и PHPUnit включают в себя один и тот же класс sfYaml из PEAR и изнутри Doctrine, не нарушая работающую систему?

1 Ответ

0 голосов
/ 06 февраля 2011

Вы можете увидеть в сообщении об ошибке, что sfYaml.php загружается из двух разных мест.Вы должны очистить ваш путь включения, чтобы он содержал только одну копию каждой библиотеки, которая вам нужна.Используйте var_dump(get_include_path()) в вашем bootstrap.php для диагностики проблемы.

...