我有一个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
答案 0 :(得分:5)
为什么不让Test :: Harness从命令行动态构建测试环境?
prove test*.pl
或者,如果您将测试保留在t/
目录中,则标准为:
prove -r t/
答案 1 :(得分:3)
为什么要创建自己的测试脚本?只需将模块放入标准分发设置并从构建脚本运行即可。此外,您只需使用prove
执行您正在执行的操作。
答案 2 :(得分:2)
您粘贴的输出显示您的测试通过。输出的消息是警告。如果在运行perl test1.pl
时没有收到警告,那是因为您(或您正在使用的模块)未启用警告。显然,Test :: Harness使用-w标志调用perl,并且您会收到警告,因为-w会在全局范围内启用警告。 (“使用警告”只能在词汇范围内使用“使用警告”。)