Şu anda bulunmayan bir sınıf tanımı nedeniyle önemli bir hataya neden olan bir PHPUnit test paketim var. Bu, en nihayetinde, test kodunun kendisinde bir başarısızlık ve geliştiricinin kodun işlenmesinden önce testin kendisini onaylamamasıdır.PHPUnit --process-isolation kullanırken ölümcül hatadan sonra yapılan testlerle devam etmiyor
Bununla birlikte, bu gibi şeyler zaman zaman gerçekleşir ve ölümcül bir hata meydana geldiğinde (kimin nihai olarak sorumlu olduğuna bakılmaksızın), test basitçe bir başarısızlık olarak işaretlenir ve geri kalanlar için harika olur. Test takımı hala yürütülür.
--process-isolation
anahtarını okudum ve anlayabildiğim kadarıyla, bununla ilgilenmelidir. Her bir test ayrı bir işlemde çalıştığından, çocuk ölümcül bir hata nedeniyle ölürse, ebeveyn çalışmaya devam edebilir. Aslında, bu cevapta açıkça benzer bir soruya şu şekilde işaret edilmektedir: https://stackoverflow.com/a/5340151/84762, kendimi görmek istediğim çıktı türünü gösterir. süreç izolasyonu İLE süreç izolasyonu
[[email protected] ~]$ /usr/bin/phpunit --colors --verbose --coverage-html "target/coverage" ~/app/zend/tests/application/
PHP Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
PHP 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
PHP 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
PHP 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
PHP 9. include_once() /usr/share/pear/PHPUnit/Util/Fileloader.php:95
PHP 10. require_once() /home/kogi/app/zend/tests/application/translate/PollTest.php:11
Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
Call Stack:
0.0003 91584 1. {main}() /usr/bin/phpunit:0
0.0076 612672 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
0.0076 613744 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
0.0246 1249464 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
0.0706 1626680 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
0.1691 8053584 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
0.1693 8057320 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
0.1694 8057664 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
0.1711 8240600 9. include_once('/home/kogi/app/zend/tests/application/translate/PollTest.php') /usr/share/pear/PHPUnit/Util/Fileloader.php:95
0.1805 9187768 10. require_once('/home/kogi/app/zend/private/models/translate/Poll.php') /home/kogi/app/zend/tests/application/translate/PollTest.php:11
OLMADAN
:
Ancak, ne olursa olsun ben --process-isolation
bayrağını kullanmak olsun veya olmasın tam aynı çıktıyı almak gibi
[[email protected] ~]$ /usr/bin/phpunit --colors --verbose --coverage-html "target/coverage" --process-isolation ~/app/zend/tests/application/
PHP Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
PHP 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
PHP 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
PHP 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
PHP 9. include_once() /usr/share/pear/PHPUnit/Util/Fileloader.php:95
PHP 10. require_once() /home/kogi/app/zend/tests/application/translate/PollTest.php:11
Fatal error: Class 'Rmd_Database_OldObject' not found in /home/kogi/app/zend/private/models/translate/Poll.php on line 9
Call Stack:
0.0003 91752 1. {main}() /usr/bin/phpunit:0
0.0076 612824 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
0.0076 613896 3. PHPUnit_TextUI_Command->run() /usr/share/pear/PHPUnit/TextUI/Command.php:130
0.0246 1250360 4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/pear/PHPUnit/TextUI/Command.php:150
0.0708 1627528 5. PHPUnit_Framework_TestSuite->addTestFiles() /usr/share/pear/PHPUnit/Runner/BaseTestRunner.php:96
0.1688 8054296 6. PHPUnit_Framework_TestSuite->addTestFile() /usr/share/pear/PHPUnit/Framework/TestSuite.php:419
0.1690 8057992 7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/pear/PHPUnit/Framework/TestSuite.php:358
0.1691 8058336 8. PHPUnit_Util_Fileloader::load() /usr/share/pear/PHPUnit/Util/Fileloader.php:79
0.1707 8241296 9. include_once('/home/kogi/app/zend/tests/application/translate/PollTest.php') /usr/share/pear/PHPUnit/Util/Fileloader.php:95
0.1801 9188464 10. require_once('/home/kogi/app/zend/private/models/translate/Poll.php') /home/kogi/app/zend/tests/application/translate/PollTest.php:11
Başlarımızda etkili bir şekilde farklılık göstermeyenler için, iki çıktı tam anlamıyla aynıdır (uygulama süresi ve ihmal edilebilir ölçüde farklı bellek kullanımı dışında).
Her iki durumda da, önemli hata tüm test paketini öldürür. Bu özel durumda, bu 3. testte olur ve kalan 150 test (diğer dosya/paketlerde) hiçbir zaman idam edilmez.
Burada yanlış olan ne yapıyorum? Ölümcül bir hatanın (testin başarısız olarak işaretlenmesi) bir testte hayatta kalmanın ve hala kalan testleri yürütmenin başka bir yolu var mı?
DÜZENLEME
Ben PHPUnit en GitHub sayfasında yeni bir bilet ilham vermiş PHPUnit bu sorunun cevabına 3.6.10
DÜZENLEME
Yorumlar kullanıyorum: https://github.com/sebastianbergmann/phpunit/issues/545
Cevabınızı burada bulabilirsiniz: http: // stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error – alfasin
Yakalanamayacaklarını ya da olmaması gerektiğini belirten kısımdan bahsediyor olmanızdan emin değilim yakalanamaz ... ama her iki ifade de yanlıştır. Bu durumda, bir sistemin işlevselliğini test ederken, test sürecinin geri kalanını öldürmeden ölümcül hataları yakalamak çok önemlidir. Cevabınızı yanlış anladıysam özür dilerim, lütfen bana bildirin. – KOGI
Yakalanamadığını söyleyen kısımdan bahsediyordum. Kayıt için bir şeyler yazdırmak ve bunu "temiz ups" yapmak için register_shutdown_function işlevini kullanabilirsiniz, ancak çerçeve zaten yok edildiğinden (yığında) programınızı "devam ettirebileceğinizi" sanmıyorum. Tam olarak hangi satırın ölümcül hatayı tetiklediğini bildiğinizden - neden düzeltmezsiniz? – alfasin