Inline-тесты для PHP

в 20:09, , рубрики: php, phpunit, testing, метки: , ,

Inline тесты для PHPInline-тесты — это тесты, встроенные непосредственно в DOC-комментарии тестируемого скрипта. Такая фишка, насколько я знаю, есть в Python, хотя внятного описания найти не смог. В любом случае, идея мне понравилась, так как inline-тесты имеют ряд преимуществ по сравнению с обычными, которые я изложу ниже. Поэтому хочу предложить Вашему вниманию инструмент для запуска таких тестов для PHP.

Итак, какие же преимущества у inline-тестов по сравнению с обычными unit-тестами (PHPUnit и т.д.)?

Преимущества

  1. Простота и скорость добавления тестов: что и говорить, иногда хочется написать тест, но когда вспомнишь, что для этого придется создавать всю иерархию папок для этого класса (напр. App_Module_Class), потом создавать файл и класс теста, писать один и тот же занудный код проверки, потом искать, где же этот PHPUnit находится и как его корректно запускать, — руки опускаются. Да и не жалко это сделать, если тест сложный и важный, а вот когда простой...
  2. Inline-тесты могут дополнять/заменять документацию метода: действительно, программисту иногда легче понять суть кода, прочитав, что и при каких параметрах он возвращает, нежели читать описание.
  3. Inline-тесты могут быть написаны даже для закрытых методов класса: так как скрипт запуска фактически извлекает функции и методы из контекста, ему не важно private они или public.
  4. Их нельзя потерять: тесты всегда будут вместе с кодом.

Конечно, сфера применения таких тестов довольно узкая, существуют 2 ограничения:

Ограничения

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

Скачать скрипт запуска тестов можно здесь: github.com/ptrofimov/phpinlinetest

P.S. Так как PHPUnit использует теги @assert для автогенерации своих тестов, решено было оставить такое же название для совместимости.

Автор: TedMosby


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js