2014-01-24 100 views
2

我有一個Symfony2項目的一些功能測試。
當我運行沒有啓用代碼覆蓋的測試套件時,沒有問題。 但是,當我試圖生成代碼覆蓋率我得到一個PHP的致命錯誤:PHPUnit代碼覆蓋內存限制

Generating code coverage report, this may take a moment. 
PHP Fatal error: Allowed memory size of 209715200 bytes exhausted 
(tried to allocate 79 bytes) in /usr/share/php/PHP/Token/Stream.php on line 205 
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/php/PHPUnit/TextUI/Command.php:130 
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:192 
PHP 5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:373 
PHP 6. PHP_CodeCoverage->getReport() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:133 
PHP 7. PHP_CodeCoverage_Report_Factory->create() /usr/share/php/PHP/CodeCoverage.php:141 
PHP 8. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:76 
PHP 9. PHP_CodeCoverage_Report_Factory->addItems() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:98 
PHP 10. PHP_CodeCoverage_Report_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/Factory.php:94 
PHP 11. PHP_CodeCoverage_Report_Node_File->__construct() /usr/share/php/PHP /CodeCoverage/Report/Node/Directory.php:211 
PHP 12. PHP_CodeCoverage_Util::getLinesToBeIgnored() /usr/share/php/PHP/CodeCoverage/Report/Node/File.php:166 
PHP 13. PHP_Token_Stream_CachingFactory::get() /usr/share/php/PHP/CodeCoverage/Util.php:254 
PHP 14. PHP_Token_Stream->__construct() /usr/share/php/PHP/Token/Stream/CachingFactory.php:68 
PHP 15. PHP_Token_Stream->scan() /usr/share/php/PHP/Token/Stream.php:147 

我已經修改memory_limit的兩個CLI和服務器的php.ini。
我也已經修改了suhosin的memory_limit。

當我打印在CLI一的phpinfo()我得到了這些值:

memory_limit => 2048M => 2048M 
suhosin.memory_limit => 2G => 2G 

有沒有人有什麼可能會造成這個問題的想法?有沒有人遇到過這種情況?

+0

覆蓋率報告中包含了多少個文件?關於內存管理的php-token-stream有一個已知的問題,當包含很多文件時:https://github.com/sebastianbergmann/php-token-stream/issues/60 – Motin

回答

0

看起來像停在200兆字節,所以要麼你需要更多地查看你的配置以允許使用更多的內存,或者你在代碼中有一個包含循環的地方。這發生在我身上,枝條包括幾次

+0

你談論一個包含循環,但是當我在我的瀏覽器上顯示頁面我沒有問題,所以它不能成爲一個無限循環問題嗎? – Renrhaf

0

增加你的PHP內存限制(我用1744M給PHP留下一些安全空間)。在做額外的記憶之前,我有同樣的問題。接下來我改變的是從代碼覆蓋中排除外部庫(它們在作者的包中進行了測試,所以我不需要知道他們在我的項目中的代碼覆蓋率)。這使我們的項目能夠正確解析並獲得正確的代碼覆蓋率分析。

+0

我認爲供應商默認從Symfony2的代碼覆蓋率分析中排除。我的問題很奇怪... – Renrhaf