我开始一个Zend Framework项目,并决定使用Doctrine 1.2.3而不是Zend_Db类。我配置我的项目和学说命令行脚本工作得很好,我的索引控制器可以查询我的数据库没有问题,但与PHPUnit的单元测试抛出一个错误:Zend Framework项目中的sfYaml echoln()错误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服务器与PHP 5.3。 PHPUnit需要PEAR SymfonyComponents的YAML包。每当我的单元测试引导尝试重新创建并加载整个测试数据库,特别是在加载fixture文件时,就会发生这种情况。这是完整的命令和输出:
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类而不破坏工作系统?