Devel::Cover中||与//运算符的Condition覆盖率异常咨询
Devel::Cover中||与//运算符的Condition覆盖率异常问题
环境信息
- Perl: 5.40
- Devel::Cover: 1.44
我在编写单元测试时用Devel::Cover查看Condition覆盖率报告,碰到了和||(逻辑或)、//(定义或)运算符相关的奇怪问题。
正常工作的基础代码
use strict; use warnings; use 5.026; my($DEF_MIN) = 1; our($DEF_MAX) = 10; sub test { my($hashref) = @_; $hashref ||= {}; my($min) = $hashref->{'min'} || 1; my($max) = $hashref->{'max'} // 10; say qq(MIN: $min / MAX: $max); return; } test(); test({}); test({ min => 14 }); test({ max => 14 }); test({ min => 10, max => 14 });
运行这段代码后,Condition覆盖率报告符合预期(仅显示A列)。
修改后出现异常的代码
把代码里的min和max赋值语句改成下面这样:
my($min) = $hashref->{'min'} || $DEF_MIN; my($max) = $hashref->{'max'} // $DEF_MAX;
这时生成的覆盖率报告就变了——原本只显示A列,现在同时显示A和B列。
问题与测试结论
为什么会出现这种变化?我该怎么补全这类覆盖率,或者把它标记为不可覆盖的代码路径?
测试后发现:不管用||还是//,不管右侧是词法变量还是包变量,都会出现这个问题。
内容的提问来源于stack exchange,提问作者Joe Casadonte
相关产品推荐
相关产品推荐

