当运行应用程序测试套件时,我想将所有 Perl 编译和运行时警告(例如“未初始化的变量”警告)升级为致命错误,以便我和其他开发人员调查并修复生成警告的代码。但我只想在开发和 CI 测试期间这样做。在生产中,警告应该只是警告。
我尝试了以下操作:在“t/lib”中我创建了一个模块 TestHelper.pm:
# TestHelper.pm
use warnings FATAL => qw( all );
1;
然后像这样调用测试套件:
$ PERL5LIB=$PERL5LIB:./t/lib PERL5OPT=-MTestHelper.pm prove -l t/*.t
但这并没有达到将所有警告升级为致命错误的预期效果。我像平常一样收到警告,但这些警告似乎没有被视为致命的。请注意,我的所有 test.t 脚本都有“use warnings;”行在它们中——也许这会覆盖 TestHelper.pm 中的内容,因为“使用警告”具有本地范围?
相反,我这样做了:
# TestHelper.pm
# Promote all warnings to fatal
$SIG{__WARN__} = sub { die @_; };
1;
这可行,但有代码味道。我也不喜欢它在第一次警告时就爆炸了。我宁愿测试套件完整运行,记录所有警告,但测试状态最终失败,因为代码运行时带有警告。
有没有更好的方法来达到这个最终结果?
我想你正在寻找测试::无警告 http://search.cpan.org/perldoc?Test::NoWarnings.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)