2011-08-02 2 views
1

Doctrine 2와 PHPUnit을 가지고 놀고 있는데 때때로 잘못된 것이 있습니다. 그것이 unittesting의 모든 것입니다. 그러나 한 가지 이유 또는 다른 이유로 인해 PDOException이 발생하면이 문제를 일으키는 쿼리가 표시되지 않습니다. 예 :Doctrine에서 PDOException을 발생시키는 SQL 쿼리를 표시하는 방법

벌금과 멋쟁이 전부,하지만 난 그것을 디버깅의 희망을 가질 수 있도록 어떻게 교리 또는 phpunit을 나에게이 예외의 원인이되는 SQL 쿼리를 제공하는 알 수 있습니까
$ phpunit --group database 
PHPUnit 3.5.14 by Sebastian Bergmann. 

E 

Time: 2 seconds, Memory: 14.75Mb 

There was 1 error: 

1) My\Tests\Entity\MyMappingTest::testLoad 
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't11.id' in 'on clause' 

/usr/local/svn/php5/libraries/Doctrine/DBAL/Connection.php:613 
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:569 
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:624 
/usr/local/svn/php5/libraries/Doctrine/ORM/UnitOfWork.php:1979 
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php:139 
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php:44 
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php:99 
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:580 
/usr/local/svn/php5/libraries/Doctrine/ORM/EntityRepository.php:130 
/usr/local/svn/php5/libraries/Doctrine/ORM/EntityManager.php:350 


FAILURES! 
Tests: 1, Assertions: 1, Errors: 1. 

? 지금이 예외는 쓸모가 없습니다. 나는 var_dumping 예외 객체를 시도했지만 그것은 단지 반복적으로 반복된다. 확실히 Doctrine에게 더 많은 정보를 주라고 말할 수 있어야합니까?

답변

2

당신은 enable native Doctrine SQL logging 수, 또는 조금 더 많은 노력 마지막 쿼리를 저장하고 PDOException의 경우 그것을 새로운 예외를 추가 할 PHPUnit_Framework_TestCase::onNotSuccessfulTest()을 무시 Doctrine\DBAL\Logging\SQLLogger을 구현할 수와. 불행히도, 원래의 스택 트레이스는 잃어 버릴 수 있지만, PHP는 일단 예외가 생성되면 그것을 변경하는 것을 허용하지 않습니다. :(

. 로거를 사용 phpunit을 bootstrap.php에서이 작업을 수행하고 테스트 케이스의 기본 클래스에 사용할 수 있도록하는 구성 개체에 대한 사용 setSQLLogger().

+0

덕분에,이 좋은 소리. 나는이에게 때 시도를주지 나는 내일 직장에 돌아 간다. –

관련 문제