Я запускаю проект 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, не нарушая работающую систему?