PHPMD Catch / Suppress фатальные ошибки

Я пытаюсь автоматизировать свое тестирование. В качестве дымового теста я хотел бы проверить свой PHP-код с PHPMD, прежде чем продолжить работу с реальными модульными тестами. Звучит достаточно разумно, верно?

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

function foo() {{
// Stuff
}

Я ожидал 1 код выхода, PHPMD, кажется, полностью падает, и вместо этого возвращает 0 код выхода Рендеринг моего автоматизированного скрипта бесполезен. Есть ли способ подавить эти ошибки и вернуть ожидаемый код выхода? Для PHPUnit --process-isolation Вариант решил эту проблему, но я не могу найти такой вариант для PHPMD.

Соответствующий код автоматизированного тестирования

#!/usr/bin/php
<?php

exec('meta/phpmd', $output, $returnCode);
if ($returnCode == 1) {
echo '[Fail] PHP code is breaking', PHP_EOL;
exit(1);
} elseif ($returnCode == 2) {
echo '[Warn] PHP code is unclean', PHP_EOL;
} else {
echo '[OK] Code is clean! ', PHP_EOL;
}

4

Решение

В качестве обходного пути (и возможного решения) можно проверить синтаксис перед передачей его в PHPMD. Я изменил свой тестовый код на это:

#!/usr/bin/php
<?php

$dir_root = dirname(dirname(__DIR__));
$dir_php  = $dir_root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'App';

exec('find ' . $dir_php . ' -iname *.php | xargs -n1 php -l 2>/dev/null', $output, $returnCode);
if ($returnCode != 0) {
echo '[Fail] PHP contains syntax errors', PHP_EOL,
implode(PHP_EOL, $output), PHP_EOL;
exit($returnCode);
}

exec('meta/phpmd', $output, $returnCode);
if ($returnCode == 1) {
echo '[Fail] PHP code is breaking', PHP_EOL;
exit(1);
} elseif ($returnCode == 2) {
echo '[Warn] PHP code is unclean', PHP_EOL;
}

Кредиты Winglian в Reddit для массы php -l код
https://www.reddit.com/r/PHP/comments/2t7mvc/lint_an_entire_directory_of_php_files_in_parallel/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]