当我使用Test :: Harness :: runtests运行它时,为什么我的Perl模块测试会失败?

时间:2009-12-07 09:45:57

标签: perl unit-testing testing

我有一个Test::More测试脚本,用于我们制作的模块。单独运行测试脚本时,它的工作方式与预期一致。 由于我们需要运行多个测试,因此我创建了一个运行所有脚本的Test::Harness文件。但是,从Test::Harness runtests执行时,脚本会返回错误。

在调试过程中,我尝试使用backtics来运行脚本,这很有效。因此runtest命令导致错误。

线束的代码非常简单:

(perl) -w
use strict;
use warnings;
use Test::Harness;

my @tests = ('test1.pl', 'test2.pl', 'test3.pl');
runtests(@tests);

错误源自我们使用的cpan模块Pod::HtmlEasy

我希望的解决方案是运行Test::Harness而不会出错。

测试的输出:

test1..........False [] range "\w-" in regex; marked by  line 20.
Use of uninitialized value in string ne at /app/perl/lib/Pod/HtmlEasy/Parser.pm line 422,  line 20.
Use of uninitialized value in string ne at /app/perl/lib/Pod/HtmlEasy/Parser.pm line 363,  line 22.
False [] range "\w-" in regex; marked by  line 22.
Use of uninitialized value in string ne at /app/perl/lib/Pod/HtmlEasy/Parser.pm line 488,  line 24.
Use of uninitialized value in string ne at /app/perl/lib/Pod/HtmlEasy/Parser.pm line 363,  line 26.
close() on unopened filehandle PODIN at /app/perl/lib/Pod/HtmlEasy.pm line 248.
Use of uninitialized value in concatenation (.) or string at /app/perl/lib/Pod/HtmlEasy.pm line 318.
(...)
Use of uninitialized value in concatenation (.) or string at /app/perl/lib/Pod/HtmlEasy.pm line 396.
test1..........ok 2/3close() on unopened filehandle PODIN at /app/perl/lib/Pod/HtmlEasy.pm line 248.
Use of uninitialized value in concatenation (.) or string at /app/perl/lib/Pod/HtmlEasy.pm line 318.
(...)
Use of uninitialized value in concatenation (.) or string at /app/perl/lib/Pod/HtmlEasy.pm line 396.
test1..........ok                                                      

3 个答案:

答案 0 :(得分:5)

为什么不让Test :: Harness从命令行动态构建测试环境?

prove test*.pl

或者,如果您将测试保留在t/目录中,则标准为:

prove -r t/

答案 1 :(得分:3)

为什么要创建自己的测试脚本?只需将模块放入标准分发设置并从构建脚本运行即可。此外,您只需使用prove执行您正在执行的操作。

答案 2 :(得分:2)

您粘贴的输出显示您的测试通过。输出的消息是警告。如果在运行perl test1.pl时没有收到警告,那是因为您(或您正在使用的模块)未启用警告。显然,Test :: Harness使用-w标志调用perl,并且您会收到警告,因为-w会在全局范围内启用警告。 (“使用警告”只能在词汇范围内使用“使用警告”。)