我正在为现有项目编写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
并处理它。
答案 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