perl - 在开发过程中,我应该如何将 Perl 警告升级为 fatal error ?

标签 perl unit-testing continuous-integration warnings

在运行应用程序测试套件时,我想将所有 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/

相关文章:

perl - 每日图表点击器与每小时图表点击器

C++ 单元测试和 stub 第 3 方 C 库

python - 带有 Django 和 Python 的 Atlassian Bamboo - 可能吗?

python - 用于 Python/Django 持续集成的 TeamCity

mysql - Perl 和 DBI - 加载数组问题

arrays - 如何获取哈希数组中元素的数量?

perl - Web::Scraper语法中的{}是什么意思?

c# - 如何对远程存储过程进行单元测试

java - 使用 AssertJ 3 扁平提取 map

WCF自动化部署