Принудительное исключение файлов из покрытия кода PHPUnit
можно ли принудительно исключить папку из покрытия кода PHPUnit?
проблема у меня есть, что у меня есть проект Symfony 1.4, который имеет папки в ./lib/vendor/symfony/*
. Я хочу исключить все, что находится внутри ./lib/vendor/*
- рекурсивно.
теперь я хочу исключить их, были ли они покрыты косвенно мои тесты или нет, т. е. я никогда не хочу видеть эти папки. Итак, я добавил этот бит к моему phpunit.xml
файл конфигурации, но он, похоже, не исключает эти папки, что бы я ни делал:--5-->
<filter>
<whitelist>
<exclude>
<directory>./lib/vendor/*</directory>
<directory>./lib/vendor/symfony/lib/*</directory>
</exclude>
</whitelist>
</filter>
мне кажется, что в тот момент, когда код попадает и XDebug замечает это, PHPUnit будет включать его в покрытие кода независимо от того, что. Недостатком для меня в этом является то, что этот код уже протестирован разработчиками Symfony, поэтому не нужно включать его в мой отчет о покрытии, перепутав мои номера :P
4 ответов
ок, так я думал, что вы можете иметь либо черный список или белый список раздел, оказывается, можно иметь оба, так что я в черном списке этих папках, и она работала:
<filter>
<blacklist>
<directory>./lib/vendor</directory>
<directory>./lib/helper</directory>
</blacklist>
</filter>
наблюдение: белый список (каталоги, которые вы хотите включить в покрытие кода) делает выполнение phpunit всего набора тестов быстрее, по сравнению с черным списком.
<filter>
<whitelist>
<directory>/my/project/directory/to/be/covered</directory>
....
</whitelist>
</filter>
протестировано с помощью: PHPUnit 4.5.0 и PHP 5.5.9
правильный способ исключить определенные файлы из отчета о покрытии в более или менее последних версиях 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
бегал PHPUnit 5.7.23
и имел проблемы с получением файлов, включенных и исключенных для phpunit
. The синтаксис кажется, существенно изменились и лишь частично совместимы. У меня было сложное требование, когда мне нужно было также включить и исключить отдельные каталоги для покрытия кода (его устаревшая система).
вот что мне нужно в 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