2011-02-03 72 views
0

我开始一个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类而不破坏工作系统?

回答

0

您可以在错误消息中看到sfYaml.php正从两个不同的位置加载。您必须清理包含路径,以便只包含您需要的每个库的一个副本。在您的bootstrap.php中使用var_dump(get_include_path())来诊断问题。

相关问题