PHPUnit代码覆盖率使zend_mm_heap损坏或分段错误11

时间:2013-02-14 19:37:47

标签: php symfony phpunit code-coverage

我正在研究Symfony2捆绑包并运行phpunit --coverage-text。所有测试都没有任何问题,我收到了代码覆盖率报告,但报告不完整,底部有以下信息。

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>

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

output_buffering = 8192
memory_limit = 1028M

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

你如何摆脱这些问题?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

过滤覆盖率报告的源文件