【发布时间】:2011-06-20 09:09:26
【问题描述】:
我正在开始一个 Zend Framework 项目,我决定使用 Doctrine 1.2.3 而不是 Zend_Db 类。我配置了我的项目,并且学说命令行脚本运行良好,我的索引控制器可以毫无问题地查询我的数据库,但是使用 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
我正在使用带有 PHP 5.3 的 Zend Server。 PHPUnit 需要 PEAR SymfonyComponents 的 YAML 包。每次我的单元测试引导程序尝试重新创建和加载整个测试数据库时都会发生这种情况,特别是在加载夹具文件时。这是完整的命令和输出:
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 模型的测试类,但即使我注释了它的测试代码,也会发生这个错误。
很奇怪,因为如果我手动执行教义脚本,它运行没有问题,并且系统通过web运行时没有错误。这只会发生在单元测试中。
如果 Doctrine 和 PHPUnit 都包含来自 PEAR 和 Doctrine 内部的相同 sfYaml 类,我该如何避免这种库冲突,而不破坏工作系统?
【问题讨论】:
标签: php zend-framework doctrine phpunit yaml