Автоматическое тестирование

Материал из Eludia
Перейти к: навигация, поиск

Стоит признать, что на протяжении весьма долгого времени в Eludia.pm никак не использовалось ничего похожего на TDD (Test driven development). Отчасти это было мотивировано тем, что автоматическое тестирование полного цикла (от серверного кода до визуальных эффектов, отображаемых на клиенте) в данном случае практически невозможно. Были также отговорки по поводу того, что содержательный тест отлаживать сложнее, чем собственно программу, а следовательно, в случае навязывания TDD многие тесты будут проходиться заведомо успешно в силу подтасовок. (Более-менее аналогичная ситуация с документированием в стиле literate programming: если комментарии обязательны, они быстро становятся бессмысленными или как минимум неадекватными).

Тем не менее, с накоплением кода всё острее стала чувствоваться потребность по крайней мере зафиксировать ожидаемое поведение для некоторых ключевых вспомогательных алгоритмов. Конкретно такая необходимость проявилась после некоторых изменений в процедуре wish — соответственно, первые автоматические тесты Eludia.pm связаны с wish table_data и вспомогательными процедурами.

В перспективе таких тестов должно становиться больше, однако лозунг полного покрытия кода не выдвигается в принципе. Автоматическое тестирование кода приложения (не ядра) — реальная, хотя не первоочередная задача. Однако впредь настоятельно рекомендуется не делать commit кода ядра, пока имеющаяся коллекция тестов выявляет какие-либо проблемы.

Запуск тестов

Тестирование всегда производится в рамках какого-либо конкретного экземпляра приложения (в контексте его БД). Поэтому перед запуском тестов необходимо перейти в соответствующую директорию.

Далее остаётся только сказать

 ins test

или, если у Вас не налажен скрипт ins, то иным способом запустите процедуру Eludia::install::test. Далее остаётся лишь наблюдать результаты.

Как это работает

Процедура Eludia::install::test сначала создаёт директорию t и копирует в неё все тестовые скрипты, которые ей удаётся обнаружить в инсталляции ядра. Далее каждый из них исполняется как Offline-скрипт, вывод которого перехватывается стандартным Test::Harness. Соответственно, сами скрипты должны генерировать текст в формате в формате TAP. Для этого удобно использовать Test::More, который входит в любой дистрибутив Perl.

Каждый скрипт запускается с нуля, в том числе загружает ядро и соединяется с БД. Это не быстро, зато надёжно: результаты тестов не зависят от того, что зависло в памяти с прошлого раза. Правда, загрузочный баннер показывается лишь один раз, причём это отдельное мероприятие, предваряющее тестирование как таковое: чтобы было что что скопировать в письмо с ошибкой. А по ходу тестов вся отладочная печать подавлена (переменной окружения $ENV {ELUDIA_SILENT}), чтобы не засорять красивые отчёты Test::Harness.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты