Inline-тесты — это тесты, встроенные непосредственно в DOC-комментарии тестируемого скрипта. Такая фишка, насколько я знаю, есть в Python, хотя внятного описания найти не смог. В любом случае, идея мне понравилась, так как inline-тесты имеют ряд преимуществ по сравнению с обычными, которые я изложу ниже. Поэтому хочу предложить Вашему вниманию инструмент для запуска таких тестов для PHP.
Итак, какие же преимущества у inline-тестов по сравнению с обычными unit-тестами (PHPUnit и т.д.)?
Конечно, сфера применения таких тестов довольно узкая, существуют 2 ограничения:
Скачать скрипт запуска тестов можно здесь: github.com/ptrofimov/phpinlinetest
P.S. Так как PHPUnit использует теги assert для автогенерации своих тестов, решено было оставить такое же название для совместимости.
Итак, какие же преимущества у inline-тестов по сравнению с обычными unit-тестами (PHPUnit и т.д.)?
Преимущества
- Простота и скорость добавления тестов: что и говорить, иногда хочется написать тест, но когда вспомнишь, что для этого придется создавать всю иерархию папок для этого класса (напр. App_Module_Class), потом создавать файл и класс теста, писать один и тот же занудный код проверки, потом искать, где же этот PHPUnit находится и как его корректно запускать, — руки опускаются. Да и не жалко это сделать, если тест сложный и важный, а вот когда простой...
- Inline-тесты могут дополнять/заменять документацию метода: действительно, программисту иногда легче понять суть кода, прочитав, что и при каких параметрах он возвращает, нежели читать описание.
- Inline-тесты могут быть написаны даже для закрытых методов класса: так как скрипт запуска фактически извлекает функции и методы из контекста, ему не важно private они или public.
- Их нельзя потерять: тесты всегда будут вместе с кодом.
Конечно, сфера применения таких тестов довольно узкая, существуют 2 ограничения:
Ограничения
- Подходит только для простых тестов: во-первых, тест нужно уместить в одну строчку комментария, а во-вторых, сложный тест, использующий взаимосвязь нескольких функций, уже не напишешь.
- Подходит только для изолированных функций/методов: функция должна общаться с внешним миром только через аргументы и возвращаемое значение.
Скачать скрипт запуска тестов можно здесь: github.com/ptrofimov/phpinlinetest
P.S. Так как PHPUnit использует теги assert для автогенерации своих тестов, решено было оставить такое же название для совместимости.