PHPUnit代码覆盖内存限制

时间:2014-01-24 09:03:27

标签: php symfony phpunit code-coverage memory-limit

我有一个带有一些功能测试的Symfony2项目 当我在没有启用代码覆盖的情况下运行测试套件时,没有问题。 但是当我尝试生成代码覆盖时,我收到一个PHP致命错误:

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

我已经为cli和服务器php.ini修改了memory_limit 我也已经修改了suhosin的memory_limit。

当我在cli中打印phpinfo()时,我得到了这些值:

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

有没有人知道可能导致此问题的原因?有人遇到过这样的情况吗?

2 个答案:

答案 0 :(得分:0)

看起来它停止在200兆字节,所以你需要更多地查看你的配置以允许使用更多的内存,或者你在代码中的某个地方有一个包含循环。这种情况发生在我身上,包括两次枝条

答案 1 :(得分:0)

增加PHP内存限制(我使用1744M为PHP留下一些安全空间)。在做额外的记忆之前我遇到了同样的问题。我改变的下一件事是从代码覆盖中排除外部库(它们在作者的包中进行测试,因此我不需要知道他们在我的项目中的代码覆盖率)。这使我们的项目能够正确解析并获得正确的代码覆盖率分析。