2011-08-02 4 views
1

私はDoctrine 2とPHPUnitで遊んでいますが、時には何かが間違っていることがあります。それがunittestingのすべてです。しかし、ある理由か他の理由でPDOExceptionが発生した場合、その原因となっているクエリは表示されません。例:DoctrineでPDOExceptionを引き起こす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. 

すべての罰金とダンディですが、私はそれをデバッグするのいずれかの希望を持っているように、どのように私は私にこの例外を発生させているSQLクエリを与えるために教義やPHPUnitのを教えてくれますか?今、この例外は無用です。私は例外オブジェクトをvar_dumpingしようとしましたが、それは永遠に繰り返されます。確かに私はDoctrineにもっと情報を与えるように言えるだろうか?

答えて

2

あなたはenable native Doctrine SQL logging可能性、あるいはもう少しの努力で、あなたは最後のクエリを保存し、それをPDOExceptionの場合、新しい例外を追加するPHPUnit_Framework_TestCase::onNotSuccessfulTest()を上書きするDoctrine\DBAL\Logging\SQLLoggerを実装することができます。残念ながら、元のスタックトレースは失われますが、PHPは例外のメッセージを作成した後で変更することはできません。 :(configオブジェクト上

使用setSQLLogger()あなたのロガーを使用する。PHPUnitのbootstrap.phpでこれを行うと、あなたのテストケースの基本クラスが使用できるようにします。

+0

おかげで、これはいいですね。ときに私はこれを試してみますよ私は明日仕事に戻ります。 –

関連する問題