Как исключить неиспользуемые библиотеки из отчета о покрытии кода?

Есть что-то, что я, по-видимому, не понимаю в белом списке покрытия кода PHPUnit.

У меня есть следующий фильтр для пары папок:

<filter>
    <whitelist addUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">./app</directory>
    </whitelist>
    <whitelist addUncoveredFilesFromWhitelist="false">
        <directory suffix=".php">./lib</directory>
    </whitelist>
</filter>
  • «приложение» — я хочу знать обо всем, что здесь не описано, поэтому я включил addUncoveredFilesFromWhitelist для основного приложения. (это работает, как и ожидалось)

  • "lib" - я хочу посмотреть, что было описано в используемых файлах отсюда, но там будет много неиспользуемого, поэтому я отключил addUncoveredFilesFromWhitelist для файлов библиотеки. (с этим у меня проблема)

Дело в том, что файлы библиотек, не включенные во время выполнения, отображаются в отчетах как невыполненный код. Я могу убедиться, что код не включен во время теста, добавив строки, которые вызовут фатальные ошибки.

Этот результат кажется противоречащим тому, что говорят документы PHPUnit, но, без сомнения, я делаю это неправильно. Может ли кто-нибудь объяснить, как я могу включить исполняемый код моей библиотеки, но только то, что требовалось во время тестирования?


person Tim    schedule 05.06.2015    source источник


Ответы (1)


Вы можете использовать узел filter в файле phpunit.xml. Я использовал следующий файл в проекте. Это локальные файлы белого списка:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
  backupStaticAttributes="false"
  syntaxCheck="false"
  bootstrap="tests/bootstrap.php" 
>
<php>
  <includePath>lib/php</includePath>
</php>
<filter>
  <whitelist>
    <directory suffix=".php">lib/php/</directory>
  </whitelist>
</filter>
<testsuites>
   <testsuite name="Jm_Log">
     <directory suffix="Test.php">tests</directory>
   </testsuite>
</testsuites>
<logging>
  <log type="coverage-html" target="build/coverage" title="jam"
   charset="UTF-8" yui="true" highlight="true"
   lowUpperBound="35" highLowerBound="70"/>
  <log type="coverage-clover" target="build/logs/clover.xml"/>
  <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
</logging>
</phpunit>

Примечание. Вы также можете использовать черный список.

person hek2mgl    schedule 05.06.2015
comment
Я не понимаю, как ваш ответ относится к моему вопросу. Я использую фильтр, как показывает мой пример. - person Tim; 08.06.2015
comment
Да, я понял это. Наверное, я слишком быстро написал. Мне нужно воспроизвести вашу проблему. Я сделаю после работы и дам вам лучший ответ. - person hek2mgl; 08.06.2015
comment
Недавно было несколько версий PHPUnit (фактически PHP_CodeCoverage), в которых фильтрация белого списка была нарушена. Пожалуйста, повторите тестирование с последней версией. - person Sebastian Bergmann; 12.06.2015
comment
@ Тим О, я скучал, чтобы вернуться к тебе. Но я не думаю, что могу помочь больше, чем Себастьян :) - person hek2mgl; 12.06.2015
comment
Только что обновился с 4.5 до 4.7.3, и у меня такая же проблема. Я могу поделиться своим тестовым примером, если у вас есть имя пользователя BitBucket. - person Tim; 12.06.2015
comment
@Tim Его hek2mgl также на Bitbucket - person hek2mgl; 12.06.2015