是否有可能强行排除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
好了,我还以为你可以有黑名单部分或白名单部分,原来可以兼得,所以我列入黑名单,这些文件夹和它的工作:
<filter>
<blacklist>
<directory>./lib/vendor</directory>
<directory>./lib/helper</directory>
</blacklist>
</filter>
正确的方法来排除覆盖报告某些文件或多或少最近的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>
观察:白名单(要包含在代码覆盖率你想要的目录),使整个测试套件更快的PHPUnit的执行,相比于黑名单。
<filter>
<whitelist>
<directory>/my/project/directory/to/be/covered</directory>
....
</whitelist>
</filter>
PHPUnit的4.5.0和5.5.9 PHP:经测试
这些答案都似乎适用于旧版本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