2011-02-03 50 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())來診斷問題。

相關問題