在运行应用程序测试套件时,我想将所有 Perl 编译和运行时警告(例如“未初始化变量”警告)提升为 fatal error ,以便我和其他开发人员调查并修复生成警告的代码。但我只想在开发和 CI 测试期间这样做。在生产中,警告应该只是作为警告。
我尝试了以下方法: 在“t/lib”中,我创建了一个模块 TestHelper.pm:
# TestHelper.pm
use warnings FATAL => qw( all );
1;
然后像这样调用测试套件:
$ PERL5LIB=$PERL5LIB:./t/lib PERL5OPT=-MTestHelper.pm prove -l t/*.t
但这并没有将所有警告提升为 fatal error 的预期效果。我收到了正常的警告,但警告似乎没有被视为致命。请注意,我所有的 test.t 脚本都有“使用警告;”这一行。在它们中-也许这会覆盖 TestHelper.pm 中的那个,因为“使用警告”具有本地范围?
相反,我这样做了:
# TestHelper.pm
# Promote all warnings to fatal
$SIG{__WARN__} = sub { die @_; };
1;
这可行,但有一种代码味道。我也不喜欢它在第一次警告时就爆炸了。我宁愿测试套件完整运行,记录所有警告,但测试状态最终失败,因为代码运行时出现警告。
有没有更好的方法来实现这个最终结果?
最佳答案
我想你正在寻找 Test::NoWarnings .
关于perl - 在开发过程中,我应该如何将 Perl 警告升级为 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1353179/