Я создаю приложение perl как «modulino», чтобы упростить тестирование. Структура каталогов выглядит примерно так:Как я могу убить тестовый скрипт perl, если модуль для тестирования недоступен?
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. Для меня это кажется желательным поведением.
Есть ли лучший способ сделать это и/или есть что-то в этом подходе, которое укусит меня по дороге?
Как насчет 'BEGIN {use_ok ('MainScript') || BAIL_OUT («неудачная загрузка MainScript»); } ' –