Синтаксис Исключить файлы из PHPUnit Code Coverage
Можно ли принудительно исключить папку из покрытия кода 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
Ответы
Ответ 1
Хорошо, поэтому я подумал, что у вас может быть либо черный список, либо секция "белый список", оказывается, вы можете иметь оба, поэтому я занесен в черный список этих папок, и это сработало:
<filter>
<blacklist>
<directory>./lib/vendor</directory>
<directory>./lib/helper</directory>
</blacklist>
</filter>
Ответ 2
Наблюдение: белый список (каталоги, которые вы хотите включить в покрытие кода) делает выполнение phpunit всего набора тестов более быстрым, по сравнению с черным списком.
<filter>
<whitelist>
<directory>/my/project/directory/to/be/covered</directory>
....
</whitelist>
</filter>
Протестировано с помощью PHPUnit 4.5.0 и PHP 5.5.9
Ответ 3
Все эти ответы, похоже, применимы к более старым версиям 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
- Но в
.tests
я хотел исключить набор файлов excluded_file_from_testsX.php
- Затем я хотел, чтобы белый список каталогов
./common/lib/included_directory
- Но под этим каталогом ниже нескольких уровней находится каталог, который я также хотел исключить (./common/lib/included_directory/core/blah/excluded_directory).
Таким образом, это, казалось, хорошо работало при запуске через phpunit --coverage-html build/coverage