PHPUnit代码覆盖率给出zend_mm_heap损坏或分段故障11


PHPUnit code coverage gives zend_mm_heap corrupted or segmentation fault 11

我正在开发Symfony2捆绑包,并运行了phpunit --coverage-text。所有测试都通过了,没有任何问题,我收到了一份代码覆盖率报告,但它是不完整的,底部有以下消息。

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

我使用的是PHP5.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>

我认为这可能是内存或输出缓冲问题,所以我尝试增加以下ini指令。

output_buffering = 8192
memory_limit = 1028M

这删除了以前的错误,但我开始接收segmentation fault 11错误。

你是如何解决这些问题的?

问题似乎是包含单元测试的文件夹是捆绑包的一部分,因此包含在代码覆盖率报告中。我不知道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>

您需要使用

<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>

过滤覆盖率报告的源文件