Perl测试-获得编译警告,但测试仍然显示一切正常
我在运行测试时得到了这个结果,但是正如您所看到的,两个测试仍然显示OK。我一点也不喜欢这个。如何将警告转化为错误Perl测试-获得编译警告,但测试仍然显示一切正常,perl,testing,Perl,Testing,我在运行测试时得到了这个结果,但是正如您所看到的,两个测试仍然显示OK。我一点也不喜欢这个。如何将警告转化为错误 1..2 Allowing a native trait to automatically supply a default is deprecated. You can avoid this warning by supplying a default, builder, or making the attribute required at UserInfo.pm line 7
1..2
Allowing a native trait to automatically supply a default is deprecated. You can avoid this warning by supplying a default, builder, or making the attribute required at UserInfo.pm line 7
require UserInfo.pm called at (eval 4) line 2
main::BEGIN() called at UserInfo.pm line 0
eval {...} called at UserInfo.pm line 0
eval 'package main;
use UserInfo @{$args[0]};
1;
;' called at /packages/run.64/perl-5.14.1/lib/5.14.1/Test/More.pm line 885
Test::More::_eval('package main;\x{a}use UserInfo @{$args[0]};\x{a}1;\x{a}', 'ARRAY(0x16fa110)') called at /packages/run.64/perl-5.14.1/lib/5.14.1/Test/More.pm line 860
Test::More::use_ok('UserInfo') called at UserInfo.t line 7
ok 1 - use UserInfo;
ok 2 - require UserInfo;
把警告变成错误?给你
use warnings FATAL=>"all";
如果您不想让脚本死掉,而是想让特定测试失败,您可以将此添加到上面:
use Test::Exception;
# later
lives_and {
is ($this->value, 42);
} "Value is 42 (and no warnings)";
看
另一种方法(如我在下面的评论中所述)是定义警告伪信号处理程序:
my @warn;
$SIG{__WARN__} = sub { push @warn, shift; };
# later
ok (!@warn, "No warnings were emitted");
不推荐的功能仍然有效,但会向您发出它们将消失的信号。停止使用不推荐使用的功能以消除警告
要测试代码运行时是否没有警告,请尝试。我最终使用了
$SIG{{uuuu WARN}=sub{WARN$[0];die}代码>
这将迫使测试报告错误,即使在出现警告的情况下,仍然打印警告本身。使用警告致命=>“全部”代码>还不够。@让我想想:eval
必须在这里阻止异常。我不知道有什么好办法可以绕过这个问题,也许是像my@warn$SIG{{uuuuu WARN}=sub{push@WARN,shift;}代码>然后确定(!@warn)
。但是,这可以在模块中重写。嗯?所以Test::More
被弃用了?什么是替代品?你在惊慌失措之前看过Test::NoWarnings吗?:)为什么要发出警告?只要使用模具。您将停止程序,但仍会收到错误消息。然而,Dallaylaen给了你几个更好的选择。@brian不,如果你只使用die,你将不会得到错误消息。好吧,你会死在你想要打印的消息中。你不需要警告。阅读模具上的文档。在做进一步的陈述之前,请先阅读任何内容的文档。