Как я могу легко добавить неустановленные модули Perl из моего каталога разработки в @INC? - PullRequest
2 голосов
/ 19 июня 2009

Я пишу Perl t / *. T тесты для существующего проекта. Во время разработки я хотел бы использовать команду «доказательства» для запуска выбранных тестов на произвольной глубине в иерархии каталогов модулей. Я создал несколько каталогов t / на той же глубине, что и файлы * .pm, которые я хотел бы проверить. К сожалению, lib / в основе кода проекта не находится в @ INC.

Каков наилучший способ автоматического определения и добавления пути к @INC? Я посмотрел опцию -b, чтобы доказать и blib в целом, но, похоже, они не работают (они берут pwd, добавляют к нему blib / lib и добавляют его в @INC). В идеале решение не требует переменной среды или установки модулей и будет содержать несколько рабочих копий одного и того же кода.

Мой подход неверен? Есть ли что-то очевидное, что мне не хватает? Модули CPAN, похоже, решают эту проблему путем установки или скопированных блоков кода в верхней части файлов * .t (гадость).

Edit:

Структура выглядит так:

/home/user/proj/branch\_foo/lib/First/Second/Third.pm
/home/user/proj/branch\_foo/lib/First/Second/t/third.t

Это работает:

~/proj/branch\_foo/lib/First/Second$ prove -I../..

Но я бы хотел:

~/proj/branch\_foo/lib/First/Second$ prove -r

Или:

~/proj/branch\_foo/lib/First/Second$ prove t/third.t

Так что я могу сделать:

~/proj/branch\_foo/lib$ prove -r

Вместо:

~/proj/branch\_foo/lib$ prove -I. -r

Может быть, мне просто нужно использовать -I и разобраться с этим.

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

Именно поэтому существует модуль blib. Он просматривает текущий каталог, а затем его родительские каталоги, ища blib / lib для добавления в @INC. Это часть стандартной библиотеки Perl, так что она у вас уже должна быть.

Где-то под t / вы можете использовать ключ -M для загрузки blib:

% perl -Mblib test.t

Если вы хотите использовать это с доказать

% perl -Mblib prove test.t

Я думаю, что это должно быть то же самое, что и ключ -b в доказательствах, но в последний раз, когда я пробовал это (давным-давно), он не работал Возможно они исправили это, чтобы работать как blib.pm:

% prove -b test.t

Обратите внимание, что для этого нужно сначала собрать дистрибутив, а не тестировать из lib / , но вы все равно должны это делать. :)

2 голосов
/ 19 июня 2009

Докажите имеет параметр командной строки -I:

-I Библиотечные пути для включения.

Можете ли вы указать пути, используя эту опцию?

Обновление:

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

0 голосов
/ 19 июня 2009

Вы можете установить переменную окружения PERL5LIB (как описано в perldoc perlrun), в результате чего perl будет предшествовать пути, разделенные двоеточиями, к вашему @INC:

% export PERL5LIB=/absolute/path/to/your/libraries
% cd into/part/of/your/test/suite
% prove -r
...