我開始一個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類而不破壞工作系統?