Покрытие кода с помощью PHPUnit - PullRequest
4 голосов
/ 21 апреля 2011

Я столкнулся с проблемой при попытке определить покрытие кода на нашем сайте.У меня есть PHPUnit, генерирующий отчет о покрытии HTML-кода при выполнении наших модульных тестов в наших трех приложениях.У нас есть общедоступное приложение, приложение администратора и приложение для составления отчетов.Я хотел бы как-то объединить их в один отчет о покрытии кода, так как приложения делятся кодом.

Кажется, что покрытие кода только вычисляет покрытие для файлов, к которым тесты "прикасаются", поэтому полностью непроверенные файлы нене используется в расчете.Кто-нибудь знает, как вытащить эти неиспользуемые файлы в расчет?Есть ли способ указать генератору покрытия вычислять, используя определенные каталоги, чтобы он извлекал файлы, которые не были затронуты?У меня есть белый список, настроенный в файле конфигурации для phpunit, установленный в корне нашего проекта.Все комментарии, ответы и советы приветствуются.

Ответы [ 5 ]

4 голосов
/ 21 апреля 2011

Если вы установили <whitelist> в файле конфигурации phpunit.xml, вы должны увидеть все непокрытые файлы.Это может быть проблемой с патчами, попробуйте абсолютные, чтобы увидеть, что это создает 0% -ое покрытие для некоторых файлов, а затем заставьте относительные пути работать.

Для объединения покрытия мало что можно сделать с помощью phpunit, которыйя знаю.Вы можете объединить результаты покрытия (пакет PHPUnit_Coverage) вручную, а затем выяснить, как их визуализировать, но вам нужно будет сделать это вручную.По крайней мере, я не знаю ни одного проекта / инструмента / способа, который сделал бы это для вас.

Самый простой способ - это запустить все 3 тестовых набора за один прогон phpunit и сгенерировать покрытие кода длячасти, о которых вы.

2 голосов
/ 10 ноября 2012

Использовать <whitelist processUncoveredFilesFromWhitelist="true"> примерно так:

<filter>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">../folder/</directory>
  </whitelist>
</filter>
0 голосов
/ 22 апреля 2011

Я столкнулся с той же проблемой, и я только добавил поколение тестовых заглушек (для каждого класса и общедоступного метода) перед запуском тестовых наборов. У вас есть даже опция для этого в phpUnit:

http://www.phpunit.de/manual/current/en/skeleton-generator.html

0 голосов
/ 22 апреля 2011

Это может показаться странным, но почему бы не создать тестовый пример, который рекурсивно проходит по папке вашего проекта и запускает require_once для каждого найденного файла? Это должно позволить XDebug создать новый HTML-файл покрытия кода для каждого требуемого файла.

0 голосов
/ 21 апреля 2011

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

Наш инструмент тестирования PHP работает по-другому.Вы даете ему список всех файлов, которые вы считаете частью вашего приложения;это поможет вам создать этот список.(Это тот же список, который вы должны были бы включить в первое решение). Он обрабатывает все упомянутые файлы и собирает данные о тестовом покрытии.Данные покрытия, которые вы получаете сейчас, включают в себя все правильно.Это должно нормально работать с PHPUnit.

Вы можете пойти дальше.Вы можете создать тестовое покрытие для каждого из ваших «отдельных» приложений и запускать их отдельно.Затем вы можете объединить данные покрытия для всех них, чтобы просмотреть покрытие для всего набора.

...