2013-01-17 160 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