2013-01-17 112 views
11

是否可以强制从PHPUnit的代码覆盖率中排除文件夹?强制从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

+0

你试过运行从路径中删除'*'很好地工作? – j0k

+0

@ j0k是的我试过了,试过所有东西,供应商,供应商/供应商/ *,供应商/ * /和供应商/ */* – Sarel

+1

我只是有类似的问题,我解释上述结构的方式是**排除**''''''包含在**白名单**中。 与''''''''''相反,** ** **''''将被包含在**黑名单**中。 – lucifurious

回答

20

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

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

不要忘记接受你自己的答案,然后 – j0k

+0

注意自我。这需要在之内... wormhit

+0

黑名单不再受Php_Code_Coverage库支持。 – unherz

3

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

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

与测试:PHPUnit的4.5.0和5.5.9 PHP

0

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

我跑PHPUnit 5.7.23,并获取文件问题包含和排除为phpunitsyntax似乎已经发生了很大变化,只是部分向后兼容。我有一个复杂的需求,我需要还包括&排除单独的代码覆盖目录(其遗留系统)。

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