Я установил в моей phpunit.xml
сделать следующее:Как исключить метод из обработки покрытия кода в PHP единицу, если вы установите processUncoveredFilesFromWhitelist = «истинный»
<filter>
<whitelist addUncoveredFilesFromWhitelist="true" processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">/my/app</directory>
</whielist>
</filter>
Я запускать тесты с:
Однако в одном файле есть один метод, который я бы никогда не оценил для покрытия, поскольку он выводит кучу мусора в мой отчет о покрытии текста. Давайте предположим, что класс/метод называется my\app\Response::render()
упрощенный вариант этого метода:
public function render($response) {
header($response['status']);
echo $response['body'];
echo "\n";
}
Этот render()
метод выдает header()
команду, а также ряд echo()
команд, которые вызывают много текста и ошибок в при запуске отчетов о покрытии с --coverage-text
.
Я попытался следующее:
- Добавлено аннотация
@codeCoverageIgnore
- На моем белом списке блока в XML, попробованным исключить весь файл:
<exclude><file>/my/app/Response.php</file></exclude>
Ни предотвратить метод от выполнения (в некотором роде).
Я рассмотрел хак, как добавить код в этот метод проверки, чтобы увидеть, если мы выполняется с помощью PHPUnit, как оборачивать код:
if(strpos($GLOBALS['argv'][0], 'phpunit') !==false){
// ... do stuff
}
Или, как с помощью старой доброй $do_debug
переменной метод, передавая переменную среды через phpunit
, указанную в phpunit.xml, чтобы отключить этот код (таким образом, если позже я хочу запустить phpunit и выполнить метод, я могу просто переключить переменную окружения).
Ни один из этих вариантов не выглядит элегантным. Мне не нравится модифицировать мой код, чтобы обойти проблемы с тестированием (я даже немного недовольны добавлением аннотаций тестовых подсказок к моим методам, скорее всего, это будет обработан каким-то белым/черным списком).
Однако, когда какое-то воспринимаемое ограничение, требующее решения, отличного от элегантного, появляется в хорошо проверенном наборе библиотек, мне нравится проверять голову против сообщества и видеть, что что-то было упущено.
Кто-нибудь знает, как я могу предотвратить предотвращение обработки этого метода только в рамках функциональности Phpunit?
Это также может помочь, в ситуациях, когда тестовый код вызывает метод, который выводит в браузер: http://stackoverflow.com/questions/ 41163822/phpunit-pick-up-on-syslog-messages/41164122 # 41164122 Это «ловит» выход и отбрасывает его. –
@JohnJoseph Полезный совет. В этом случае, однако, тест не вызывал метод, именно тогда, когда в полях кода загружались файлы openoverd. – Ray