Я хочу спросить, есть ли способ проверить процедурный код с модульным тестом или любым другим способом.
Например, у меня ниже очень простой код:
$a = 10;
$b = 20;
for($i = $a; $i < $b; $i++){
echo 'Loop ' . $i . PHP_EOL;
}
Я знаю, что я могу проверить с isset()
и другие встроенные функции, если переменная существует, также может проверять тип переменной, с буферизацией вывода, я могу получить вывод и подсчитать, сколько раз цикл был выполнен,
но … могу я проверить, есть ли for
петля не while
цикл?
Я могу получить весь php файл и с помощью regex найти его, но, возможно, есть какая-то магическая функция, которая показывает мне это.
Для устаревшего файла, в котором отсутствует инкапсуляция, я бы рекомендовал протестировать его на максимально возможном уровне.
Можно ли проверить этот файл на уровне веб-сервера? Что будет функциональным тестом, а не модульным тестом? то есть:
Loop ...\n ...
как и ожидалось.Простое утверждение на выходе, а не на реализации (какой цикл используется, какие переменные устанавливаются и т. Д.), Позволит вам легче реорганизовать код, сохраняя при этом защиту теста, гарантируя, что вывод как и ожидалось.
Если функциональный тест веб-сервера невозможен, вы можете создать модульный тест, который собирает выходные данные аналогичным образом:
ob_start();
include 'your_php_file_listed_above';
$out = ob_get_clean();
Тогда вы можете утверждать, что $ out содержит Loop .. \n ...
правильно.
Я бы рекомендовал не указывать на конкретные детали реализации, то есть, какой цикл используется, какие переменные установлены, поскольку они могут замедлить рефакторинг.
Других решений пока нет …