Белый список phpunit vs Черный список - PullRequest
3 голосов
/ 03 мая 2011

Пытаюсь решить, какой из них лучше подходит для моей ситуации. Согласно документации phpunit (которая очень ограничена), белый список должен включать все файлы внутри каталога, но, похоже, он не работает таким образом. Кто-нибудь есть какие-либо предложения или может указать мне хороший справочник, кроме руководства по phpunit. Я использую файл конфигурации XML. Заранее спасибо!

<?xml version="1.0" encoding="utf-8"?>
<phpunit>
  <filter>
    <whitelist>
      <directory suffix=".php">/home/ddohr/git/project/</directory>
    <exclude>
      <directory suffix=".php">/home/ddohr/git/project/vendor/</directory>
      <directory suffix=".php">/home/ddohr/git/project/plugins/</directory>
      <directory suffix=".php">/home/ddohr/git/project/test/</directory>
    </exclude>
    </whitelist>
  </filter>
</phpunit>

1 Ответ

1 голос
/ 04 мая 2011

Обновление: Нижеследующее больше не работает с PHPUnit 3.6 и выше.См. Добавление файлов в белые / черные списки с кодовым покрытием в bootstrap.php для PHPUnit для нового решения.

Исходный ответ

Что касаетсяВ вопросе «Белый список против черного списка» отмечается, что они являются взаимоисключающими, и белый список побеждает в черном списке.Мы используем белые списки в наших проектах, так как мы хотим, чтобы 0% покрытия сообщалось о классах без тестов.Наши модули bootstrap.php устанавливают белые списки так, чтобы они казались более управляемыми, чем помещать их в phpunit.xml.

Например, bootstrap.php библиотечного проекта использует includeDirectoryForCodeCoverage() для добавления своего источника в белый список:

includeDirectoryForCodeCoverage(MY_LIBRARY_PATH);

Это простой помощник для абстрагирования реальных вызовов PHP_CodeCoverage:

function includeDirectoryForCodeCoverage($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addDirectoryToWhitelist($path);
}

function includeFileForCodeCoverage($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addFileToWhitelist($path);
}

function includeFilesForCodeCoverage(array $paths) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addFilesToWhitelist($paths);
}

Однако черный список по-прежнему удобен.PHPUnit будет скрывать записи трассировки стека для любого кода в черных списках файлов.По этой причине я добавил этот маленький драгоценный камень:

function ignoreDirectoryInStackTraces($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addDirectoryToBlacklist($path);
}
...