Tôi có bộ kiểm tra PHPUnit hiện đang gây ra lỗi nghiêm trọng do định nghĩa lớp không được tìm thấy. Điều này, cuối cùng, là một sự thất bại của mã thử nghiệm chính nó và một thất bại của các nhà phát triển để xác minh các thử nghiệm chính nó trước khi cam kết mã. Tuy nhiên, những điều như thế này sẽ xảy ra theo thời gian, và nó sẽ là tuyệt vời nếu, khi một lỗi nghiêm trọng xảy ra (bất kể ai chịu trách nhiệm cuối cùng), bài kiểm tra đơn giản được đánh dấu là thất bại, và phần còn lại của bộ thử nghiệm vẫn được thực hiện.PHPUnit không tiếp tục kiểm tra sau khi lỗi nghiêm trọng khi sử dụng --process-isolation
Tôi đã đọc về công tắc --process-isolation
và theo như tôi có thể biết, nó nên giải quyết vấn đề này. Vì mỗi thử nghiệm chạy trong một tiến trình riêng biệt, nếu đứa trẻ chết do lỗi nghiêm trọng, phụ huynh vẫn có thể tiếp tục chạy. Trong thực tế, điều này được nêu rõ trong câu trả lời này cho một câu hỏi tương tự: https://stackoverflow.com/a/5340151/84762 cho thấy loại đầu ra chính xác mà tôi muốn xem bản thân mình.
Tuy nhiên, tôi dường như nhận được cùng một kết quả chính xác bất kể có hay không tôi sử dụng --process-isolation
cờ:
KHÔNG quá trình cách ly
[[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
VỚI quá trình cách ly
[[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
Đối với những người trong chúng ta có thể không có hiệu quả khác biệt trong đầu của chúng tôi, hai kết quả đầu ra là nghĩa đen giống hệt nhau (khác với thời gian thực hiện và sử dụng bộ nhớ mà là không rõ ràng khác nhau).
Trong cả hai trường hợp, lỗi nghiêm trọng sẽ giết chết toàn bộ bộ thử nghiệm. Trong trường hợp cụ thể này, điều này xảy ra trong lần kiểm tra thứ 3 và 150 kiểm tra còn lại (trong một số tệp/bộ khác) sẽ không bao giờ được thực thi.
Tôi đang làm gì sai ở đây? Có cách nào khác để tồn tại một lỗi nghiêm trọng (đánh dấu thử nghiệm là không thành công) trong một thử nghiệm và vẫn thực hiện các thử nghiệm còn lại không?
EDIT
Tôi đang sử dụng PHPUnit 3.6.10
EDIT
Các bình luận về câu trả lời cho câu hỏi này đã truyền cảm hứng cho một vé mới trên trang GitHub PHPUnit của: https://github.com/sebastianbergmann/phpunit/issues/545
Bạn sẽ tìm thấy câu trả lời của mình tại đây: http: // stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-lỗi – alfasin
Tôi không chắc chắn nếu bạn đang đề cập đến phần nói rằng họ không thể bị bắt hoặc một phần nói rằng họ shouldn không bị bắt ... nhưng cả hai câu đều sai. Trong trường hợp này, khi kiểm tra chức năng của một hệ thống, nó rất quan trọng để bắt lỗi nghiêm trọng mà không giết chết phần còn lại của quá trình thử nghiệm. Nếu tôi hiểu nhầm câu trả lời của bạn, tôi xin lỗi, xin vui lòng cho tôi biết. – KOGI
Tôi đã đề cập đến phần nói rằng nó không thể bị bắt. Đó là sự thật bạn có thể sử dụng register_shutdown_function để in công cụ để đăng nhập và làm như vậy "up sạch" nhưng kể từ khi khung đã bị phá hủy (trên stack) Tôi không tin rằng bạn có thể "tiếp tục" chương trình của bạn. Vì bạn biết chính xác dòng lỗi gây tử vong nào được kích hoạt - tại sao không sửa lỗi? – alfasin