1

Я хочу спросить, есть ли способ протестировать процедурный код с модульным тестом или любым другим способом.Тестирование non OOP PHP

Например, у меня есть ниже очень простой код:

$a = 10; 
$b = 20; 

for($i = $a; $i < $b; $i++){ 
    echo 'Loop ' . $i . PHP_EOL; 
} 

Я знаю, что я могу проверить с isset() и другой сборки в функциях, если переменная существует, также можно проверить тип переменной, с буферизацией вывода смогу получить вывод и подсчитать, сколько циклов цикла было выполнено, , но ... я могу проверить, есть ли for цикл не while цикл?

Я могу получить весь файл php и с регулярным выражением нашел его, но, возможно, есть какая-то волшебная функция, которая показывает мне это.

+0

Зачем проверять наличие определенного типа петли? Это не имеет значения. – ShiraNai7

+0

@ ShiraNai7 Я знаю, но просто нужно знать, какой цикл использовать. – rafwlaz

ответ

2

Для устаревшего файла, в котором отсутствует инкапсуляция, я бы рекомендовал проверить его на самом высоком уровне.

Для этого файла можно проверить его на уровне веб-сервера? Какой будет функциональный тест, а не единичный тест? то есть:

  • запустить веб-сервер в начале тестового пакета
  • сделать запрос к конечной точке, которая служит файл, который размещен выше
  • утверждать содержание Loop ...\n ..., как и ожидалось.

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

Если функциональный тест веб-сервер не представляется возможным, вы можете быть в состоянии создать модульный тест, который фиксирует выход подобным образом:

ob_start(); 
include 'your_php_file_listed_above'; 
$out = ob_get_clean(); 

Тогда можно утверждать $ вне содержит Loop .. \n ... правильно.

Я бы порекомендовал не настаивать на конкретных деталях реализации, т. Е. Какой цикл используется, какие переменные установлены, поскольку они могут замедлить рефакторинг.