【问题标题】:Force Exclude files from PHPUnit Code Coverage强制从 PHPUnit 代码覆盖中排除文件
【发布时间】:2013-01-01 00:30:10
【问题描述】:

是否可以从 PHPUnit 的代码覆盖范围内强制排除文件夹?

我遇到的问题是,我有一个 Symfony 1.4 项目,它的文件夹位于 ./lib/vendor/symfony/*。我想以递归方式排除 ./lib/vendor/* 中的任何内容。

现在,我想排除它们,无论它们是否被我的测试隐式覆盖,即我不想看到这些文件夹。因此,我已将此位添加到我的 phpunit.xml 配置文件中,但无论我做什么,它似乎都没有排除这些文件夹:

<filter>
    <whitelist>
        <exclude>
            <directory>./lib/vendor/*</directory>
            <directory>./lib/vendor/symfony/lib/*</directory>
        </exclude>
    </whitelist>
</filter>

在我看来,当代码被命中并且 XDebug 注意到它时,PHPUnit 无论如何都会将它包含在代码覆盖范围内。这样做的缺点是,这个代码已经被 Symfony 开发人员测试过了,所以不需要把它包含在我的覆盖率报告中,弄乱我的数字:P

【问题讨论】:

  • 您是否尝试从路径中删除*
  • @j0k 是的,我试过了,几乎尝试了所有东西,vendor、vendor/、vendor/*、vendor/*/ 和 vendor/*/*
  • 我只是遇到了类似的问题,我解释上述结构的方式是排除 &lt;directory&gt; 不被包含在白名单中乙>。与&lt;blacklist&gt;&lt;exclude&gt; 不同,后者将排除 &lt;directory&gt;'s 不被包含在黑名单中。

标签: symfony1 phpunit symfony-1.4 code-coverage


【解决方案1】:

好的,所以我认为您可以拥有黑名单部分或白名单部分,结果您可以同时拥有这两个部分,所以我将这些文件夹列入了黑名单并且它起作用了:

    <filter>
        <blacklist>
              <directory>./lib/vendor</directory>
              <directory>./lib/helper</directory>
        </blacklist>
    </filter>

【讨论】:

  • 自我说明。这需要在 ...
  • Php_Code_Coverage 库不再支持黑名单。
【解决方案2】:

在或多或少的 PHPUnit 最新版本中,从覆盖率报告中排除某些文件的正确方法是使用 &lt;exclude&gt; 指令而不是 &lt;blacklist&gt;。例如:

  <filter>
    <whitelist>
      <directory suffix=".php">src/</directory>
        <exclude>
           <directory suffix=".php">src/Legacy/</directory>
           <file>src/example.php</file>
        </exclude>
    </whitelist>
  </filter>

对于使用最新架构的最新 PHPUnit,这将是:

  <coverage>
    <include>
      <directory suffix=".php">src/</directory>
    </include>
    <exclude>
      <directory suffix=".php">src/Legacy/</directory>
      <file>src/example.php</file>
    </exclude>
  </coverage>

【讨论】:

  • 这个答案的后缀过滤器对我的覆盖率报告生成的性能产生了巨大的影响;谢谢!
【解决方案3】:

观察:与黑名单相比,白名单(您希望包含在代码覆盖范围内的目录)使整个测试套件的 phpunit 执行更快。

<filter>
    <whitelist>
          <directory>/my/project/directory/to/be/covered</directory>
          ....
    </whitelist>
</filter>

测试:PHPUnit 4.5.0 和 PHP 5.5.9

【讨论】:

    【解决方案4】:

    这些答案似乎都适用于旧版本的PHPUnit

    我正在运行 PHPUnit 5.7.23,但在获取包含和排除 phpunit 的文件时遇到问题。 syntax 似乎发生了很大变化,只是部分向后兼容。我有一个复杂的要求,我还需要包含和排除用于代码覆盖的单独目录(它是一个遗留系统)。

    这是我在phpunit.xml 中需要的:

    <testsuites>
        <testsuite name="Unit Tests">
            <directory suffix="Test.php">./tests</directory>
    
            <exclude>./tests/blah/excluded_file_from_tests1.php</exclude>
            <exclude>./tests/blah/excluded_file_from_tests2.php</exclude>
            <exclude>./tests/blah/excluded_file_from_tests3.php</exclude>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./common/lib/included_directory</directory>
            <exclude>
                <directory suffix=".php">./common/lib/included_directory/core/blah/excluded_directory</directory>
            </exclude>
        </whitelist>
    </filter>
    

    所以:

    • &lt;testsuites&gt; 下我包括./tests 目录
    • 但是,在.tests 下,我想排除一组文件excluded_file_from_testsX.php
    • 然后,我想将一个目录列入白名单./common/lib/included_directory
    • 但是,在该包含目录下几级以下是我也想排除的目录 (./common/lib/included_directory/core/blah/excluded_directory)。

    所以当通过 phpunit --coverage-html build/coverage 运行时,这似乎运行良好

    【讨论】:

      【解决方案5】:

      适用于 PHPUnit 9.0.1

      <filter>
          <whitelist addUncoveredFilesFromWhitelist="true">
              <directory suffix=".php">DIRECTORY_TO_ADD</directory>
              <directory suffix=".php">ANOTHER_DIR_TO_ADD</directory>
              <exclude>
                  <file>ANOTHER_DIR_TO_ADD/file1_to_not_include.php</file>
                  <file>ANOTHER_DIR_TO_ADD/file2_to_not_include.php</file>
              </exclude>
          </whitelist>
      </filter>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 2022-10-21
        • 2015-07-27
        • 1970-01-01
        • 2023-03-16
        • 2014-02-15
        相关资源
        最近更新 更多