如何轻松地将我的开发目录中卸载的Perl模块添加到@INC?

时间:2009-06-18 23:53:17

标签: perl testing path perl-prove

我正在为现有项目编写Perl t / * .t测试。在开发过程中,我想使用'prove'在模块目录层次结构中的任意深度运行select测试。我创建了一些与我想要测试的* .pm文件深度相同的t /目录。不幸的是,项目代码底部的lib /不在@INC中。

自动检测并添加@INC路径的最佳方法是什么?我已经看了-b选项来证明和blib一般但它们似乎不起作用(它们采用pwd并将blib / lib附加到它并将其添加到@INC)。理想情况下,解决方案不需要环境变量或安装模块,并且可以容纳相同代码的许多工作副本。

我的方法有误吗?有什么明显的东西我不见了吗? CPAN模块似乎通过安装或复制* .t文件(yuck)顶部的代码块来解决这个问题。

编辑:

结构如下:

/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 个答案:

答案 0 :(得分:2)

prove有一个-I命令行选项:

  

-I要包含的库路径。

您可以使用该选项指定路径吗?

<强>更新

感谢您提供布局。我现在想不出快速的解决方案,但也许您可以在相应的目录中使用.proverc文件来减少所需的输入。我不确定多个.proverc文件如何与-r选项进行交互,但这是值得研究的内容。

答案 1 :(得分:2)

这正是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 :(得分:0)

您可以设置环境变量PERL5LIB(如perldoc perlrun中所述),这会导致perl在您的@INC前面添加以冒号分隔的路径:

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