作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 Perl 模块,并且我正在使用 carp 向调用程序抛出一个非致命警告。
carp 警告工作正常 - 我正在检查输入参数是否满足特定条件 - 如果它不满足条件,则会使用 carp 发送警告,并且模块继续使用参数的默认值而不是调用程序的参数通过了。警告只是通知正在使用默认参数而不是传入的参数。
我的问题是我的测试脚本。我的测试脚本向模块发送了一个错误的参数,我试图捕捉返回的警告消息并确保我得到了正确的警告消息。
我的模块看起来像这样:
else {
carp "value must be numeric - using default value";
}
我的测试脚本如下所示:
eval {
#call to my module
};
like (
$@,
qr/value must be numeric/,
"Should abort on non-numeric value"
);
当我运行测试时,我可以在屏幕上看到警告(它必须进入 STDERR),但 $@ 变量的内容是 '' - 空白。
t/04bad_method_calls....ok 10/12value must be numeric - using default value at ...
# Failed test 'Should abort on non-numeric value'
# at t/04bad_method_calls.t line 98.
t/04bad_method_calls....NOK 12
# '' doesn't match '(?-xism:value must be numeric)'
# Looks like you failed 1 test of 12.
如果我将鲤鱼改为呱呱,我的测试脚本就可以工作——它会捕获错误消息(但我只想警告,而不是中止)。
最佳答案
从这个页面,http://perldoc.perl.org/perlvar.html ,看起来你想设置本地$SIG{__WARN__}
到一个子程序,它将把警告变成你的测试脚本的 fatal error 。他们给出的例子是:
local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;
关于perl - 如何在 Perl 中捕获鲤鱼的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483622/
我正在尝试编写一个 perl 单元测试。我能够为它测试快乐案例场景。但是,如果方法中产生错误,它会使用 Carp:confess "" 打印错误。 .我无法在测试中发现这种情况。我尝试使用 dies_
我是一名优秀的程序员,十分优秀!