Покрытие кода с помощью PHPUnit


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

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

Author: halfer, 2011-04-21

5 answers

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

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

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

 4
Author: edorian, 2011-04-21 07:51:35

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

<filter>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">../folder/</directory>
  </whitelist>
</filter>
 2
Author: Jens A. Koch, 2013-01-20 12:25:16

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

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

 0
Author: ts., 2011-04-22 02:58:09

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

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

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

 -1
Author: Ira Baxter, 2011-04-22 01:17:56

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

 -1
Author: james, 2011-04-22 02:52:57