Принудительное исключение файлов из покрытия кода 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