部队从PHPUnit的代码覆盖率排除文件(Force Exclude files from PHPU

2019-08-07 04:42发布

是否有可能强行排除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

Answer 1:

好了,我还以为你可以有黑名单部分或白名单部分,原来可以兼得,所以我列入黑名单,这些文件夹和它的工作:

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


Answer 2:

正确的方法来排除覆盖报告某些文件或多或少最近的PHPUnit的版本是使用<exclude>指令而不是<blacklist> 。 例如:

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


Answer 3:

观察:白名单(要包含在代码覆盖率你想要的目录),使整个测试套件更快的PHPUnit的执行,相比于黑名单。

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

PHPUnit的4.5.0和5.5.9 PHP:经测试



Answer 4:

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

我运行PHPUnit 5.7.23 ,并获得了包含和排除的文件的问题phpunit 。 的语法似乎已经显着改变,并且仅部分地向后兼容。 我有一个复杂的需求在那里,我需要还包括和排除代码覆盖(其遗留系统)不同的目录中。

以下是我在需要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>

所以:

  • <testsuites>我包括./tests目录
  • 但是,在.tests我想排除一组文件excluded_file_from_testsX.php
  • 然后,我想白名单目录./common/lib/included_directory
  • 但是,下,包括以下几级目录是我也想排除(./common/lib/included_directory/core/blah/excluded_directory)。

因此,这似乎很好地工作时,通过运行phpunit --coverage-html build/coverage



文章来源: Force Exclude files from PHPUnit Code Coverage