2

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

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

我的方法错了吗?我有什么明显的遗漏吗?CPAN 模块似乎通过安装或复制 *.t 文件顶部的代码块来解决这个问题(恶心)。

编辑:

结构如下:

/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和处理它。

4

3 回答 3

2

证明有一个-I命令行选项:

-I要包含的库路径。

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

更新:

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

于 2009-06-19T00:20:45.580 回答
2

这正是 blib 模块存在的原因。它在当前目录中查找,然后在其父目录中查找要添加到@INC的blib/lib 。它是 Perl 标准库的一部分,因此您应该已经拥有它。

t/下的某个地方,您可以使用 -M 开关来加载 blib:

% perl -Mblib test.t

如果你想用它来证明

% perl -Mblib prove test.t

我认为这应该与证明中的 -b 开关相同,但上次我尝试它(很久很久以前)它没有用。也许他们已经将其修复为像 blib.pm 一样工作:

% prove -b test.t

请注意,这要求您首先构建您的发行版,而不是从lib/进行测试,但无论如何您都应该这样做。:)

于 2009-06-19T18:57:59.400 回答
0

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

% export PERL5LIB=/absolute/path/to/your/libraries
% cd into/part/of/your/test/suite
% prove -r
于 2009-06-19T12:26:53.413 回答