Как мне убить скрипт тестирования perl, если модуль для тестирования недоступен? - PullRequest
1 голос
/ 17 января 2012

Я создаю приложение на Perl как " modulino ", чтобы упростить тестирование. Структура каталогов выглядит примерно так:

MainScript.pm
t/001_load.t
t/002_setup.t
t/003_etc...

Первый тест в каждом тестовом файле .t также загружает модуль с:

BEGIN { use_ok('MainScript'); }

Для тестирования я запускаю следующее в каталоге верхнего уровня:

prove -l

Все до этого момента прекрасно работает. Я сталкиваюсь с проблемой, когда случайно запускаю тестовые сценарии .t напрямую.

Мои пальцы имеют почти автономную привычку нажимать горячие клавиши для запуска сценария сразу после сохранения его в моем текстовом редакторе. Когда я делаю это с одним из тестовых файлов, он покорно запускается и сообщает о сбое по всем направлениям. Это ожидается, так как он не может видеть модуль, если он запускается из своего собственного каталога. Меня беспокоит то, что некоторые тесты пишут в файловую систему. Примерами являются файлы конфигурации и файлы данных, используемые для проверки. Я предпочел бы, чтобы тестовый скрипт каркал перед тем, как он что-то сделает, если он не сможет загрузить модуль, который должен тестироваться. Таким образом, мне не нужно беспокоиться о том, что из остальной части теста ничего не выйдет.

Решение, с которым я сейчас работаю, заключается в замене строки BEGIN { use_ok('MainScript'); } стандартным вызовом использования:

use MainScript;

Выполнение теста с prove -l все еще работает, как и ожидалось. Несмотря на то, что тест use_ok был удален, очевидно, что все в порядке, поскольку остальная часть файла выполняется. Если по какой-либо причине тест не может найти модуль, он дросселирует и «доказать» все еще показывает тестовый файл как неудачный. Если я запускаю скрипт непосредственно из редактора, он завершается неудачно во время компиляции с сообщением, что не может найти запрошенный модуль в @INC. Это кажется мне желательным поведением.

Есть ли лучший способ сделать это, и / или есть ли в этом подходе что-то, что укусит меня в будущем?

1 Ответ

4 голосов
/ 17 января 2012

Я всегда так делал.

У меня есть один тест (обычно называемый 00-load.t), который делает use_ok и больше ничего (кроме печати номера версии).Все тесты, которые на самом деле выполняют модуль, выполняют обычную use, потому что если это не удастся, нет смысла продолжать тесты.

...