2013-02-14 2 views
1

Я работаю над пакетом Symfony2 и запускал phpunit --coverage-text. Все тесты проходят без каких-либо проблем, и я получил отчет о покрытии кода, но он был неполным, а внизу - следующее сообщение.Покрытие кода PHPUnit дает zend_mm_heap повреждение или ошибку сегментации 11

Classes: 4.08% (2/49) 
Methods: 1.94% (12/619) 
Lines: 1.60% (46/2867) 
.. 
.... 
zend_mm_heap corrupted 

Я нахожусь на PHP 5.4.11, и я запускаю последние версии PHPUnit и xdebug. PHPUnit всегда работает должным образом, за исключением случаев, когда я прошу его сделать покрытие кода. Вот соответствующая часть моего файла конфигурации PHPUnit.

<testsuites> 
     <testsuite name="My Suite"> 
      <directory>./src/Company/*Bundle/Tests</directory> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <whitelist> 
      <directory suffix=".php">./src/Company/*Bundle/</directory> 
     </whitelist> 
    </filter> 

я понял, что это либо проблема памяти или буферизация вывода, поэтому я попытался следующие повысит ини директивы.

output_buffering = 8192 
memory_limit = 1028M 

Это снимало предыдущую ошибку, но я начал вместо получения ошибки segmentation fault 11 вместо этого.

Как вы избавитесь от этих проблем?

ответ

0

Проблема заключается в том, что папка, содержащая модульные тесты , является частью пакета и поэтому была включена в отчет о покрытии кода. Я не знаю специфики того, что пойдет не так в PHPUnit, но если ваши модульные тесты находятся в вашем комплекте, вам нужно убедиться, что они специально отфильтрованы из охвата кода.

Это мой новый файл конфигурации phpunit.xml (соответствующие части). Нет zend_mm_heap и отсутствие сегментации.

<testsuites> 
     <testsuite name="My Suite"> 
      <directory>./src/Company/*Bundle/Tests</directory> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <whitelist> 
      <directory suffix=".php">./src/Company/*Bundle/</directory> 
      <exclude> 
       <directory>./src/*/*Bundle/Tests</directory> 
      </exclude> 
     </whitelist> 
    </filter> 
+0

Symfony2 поставляется с файлом конфигурации phpunit.xml.dist, который заботится об этом за вас. Если вы похожи на меня и начали свою собственную конфигурацию с нуля, ее удобно запомнить. –

+0

У меня такая же проблема, но для меня это происходит только с текстовым форматом. Все остальные отлично работают. – Dynom

+0

Также см. Http://stackoverflow.com/questions/2247977/what-does-zend-mm-heap-corrupted-mean – Ben

0

Вы должны использовать

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
    <directory suffix=".php">/path/to/files</directory> 
    <file>/path/to/file</file> 
    <exclude> 
     <directory suffix=".php">/path/to/files</directory> 
     <file>/path/to/file</file> 
    </exclude> 
    </whitelist> 
</filter> 

фильтровать исходные файлы для отчета покрытия