2011-02-03 3 views
0

Zend Framework 프로젝트를 시작하고 Zend_Db 클래스 대신 Doctrine 1.2.3을 사용하기로 결정했습니다. 내 프로젝트와 교리 명령 줄 스크립트, 내 인덱스 컨트롤러가 문제없이 내 데이터베이스를 조회 할 수 있습니다 잘 작동 구성되어 있지만 phpunit을 가진 단위 테스트에서 오류가 발생합니다 : 나는 PHP 5.3 젠드 서버를 사용하고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 

. 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 모델에 대한 테스트 클래스는 하나 뿐이지 만 테스트 코드에 주석을 추가하더라도이 오류가 발생합니다.

Doctrine 스크립트를 직접 실행하면 문제없이 실행되므로 시스템이 웹을 통해 실행될 때 오류가 발생하지 않으므로 이상합니다. 이것은 단지 단위 테스트에서 발생합니다.

Doctrine과 PHPUnit 모두 PEAR 및 Doctrine과 동일한 sfYaml 클래스가 작동중인 시스템을 손상시키지 않으면이 라이브러리 충돌을 피할 수 있습니까?

답변

0

sfYaml.php가 두 개의 다른 위치에서로드되고 있음을 오류 메시지에서 볼 수 있습니다. 포함 경로를 정리해야만 필요한 각 라이브러리의 복사본이 하나씩 만 있어야합니다. bootstrap.phpvar_dump(get_include_path())을 사용하여 문제를 진단하십시오.