2013-01-17 33 views
11

Czy możliwe jest wymuszone wykluczenie folderu z zasięgu kodu PHPUnit?Wymuś wykluczenie plików z kodu PHPUnit

Problem Mam, że mam projekt Symfony 1.4, który ma foldery pod numerem ./lib/vendor/symfony/*. Chcę wyłączyć wszystko, co jest wewnątrz ./lib/vendor/* - rekursywnie.

Teraz chcę je wykluczyć, czy zostały one niejawnie zakryte przez moje testy, czy nie, tzn. Nigdy nie chcę oglądać tych folderów. Więc dodałem ten bit do mojego phpunit.xml pliku konfiguracyjnym, ale nie wydaje się, aby wykluczyć te foldery, bez względu na to, co robię:

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

Wydaje mi kod chwila dostanie i zawiadomienia Xdebug to, PHPUnit uwzględni to w zasięgu kodu bez względu na wszystko. Minusem dla mnie jest to, że ten kod jest już testowany przez programistów Symfony, więc nie trzeba go uwzględniać w raporcie pokrycia, zmyślając moje numery: P

+0

Próbowałeś usunąć '*' ze ścieżki? – j0k

+0

@ j0k tak Próbowałem tego, wypróbowałem prawie wszystko, sprzedawca, sprzedawca /, sprzedawca/*, sprzedawca/*/i sprzedawca/*/* – Sarel

+1

Po prostu miałem podobny problem i sposób, w jaki interpretowałem powyższą strukturę, było ** wyklucz ** '' '' '' z bycia zawarty w ** białej liście **. W przeciwieństwie do '' '' '' które ** wykluczałoby ** '' '' '' z bycia zawartym na ** czarnej liście **. – lucifurious

Odpowiedz

20

Ok, więc pomyślałem, że możesz mieć albo czarna lista sekcji lub sekcja whitelist, okazuje się, można mieć jedno i drugie, tak ja na czarnej liście te foldery i to działało:

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

Nie zapomnij przyjąć własnej odpowiedzi, a następnie – j0k

+0

Uwaga dla siebie. To musi być wewnątrz ... wormhit

+0

Czarna lista nie jest już obsługiwana przez bibliotekę Php_Code_Coverage. – unherz

3

Obserwacja: białych list (katalogi, które mają być włączone do pokrycia kodu) umożliwia wykonanie phpunit całego zestawu testów szybciej, w porównaniu do czarnej listy.

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

Testowane z: PHPUnit 4.5.0 i PHP 5.5.9

0

Odpowiedzi te wszystkie wydają się mieć zastosowanie do starszych wersji PHPUnit

ja biegałem PHPUnit 5.7.23 i miał problemy pobierania plików włączonych i wyłączonych dla phpunit. Wydaje się, że model syntax znacznie się zmienił i jest tylko częściowo kompatybilny wstecz. Miałem złożony wymóg, w którym musiałem również włączyć & z wyłączeniem osobnych katalogów dla zasięgu kodu (jego system starszego typu).

Oto co wymagane w 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> 

Więc:

  • Pod <testsuites> jestem tym ./tests katalogu
  • ale pod .tests chciałem wykluczyć zestaw plików excluded_file_from_testsX.php
  • Następnie chciałem dodać do białej listy katalog ./common/lib/included_directory
  • Ale pod tym zawartym katalogiem poniżej kilka poziomów jest katalogiem, który również chciałbym wykluczyć (./common/lib/included_directory/core/blah/excluded_directory).

Więc wydawało się działać dobrze, gdy prowadzony przez phpunit --coverage-html build/coverage