我有以下逻辑:
sub test {
my ($x, $y) = @_;
die unless defined $x || defined $y;
# uncoverable condition false
return $x // $y;
}
test( 1, 2 );
test( 1, undef );
test( undef, 2 );
test( undef, undef );
对于 where和都未定义return
的条件,该语句将永远不会被覆盖。所以覆盖率报告指出这种情况是未发现的:$x
$y
% | coverage | condition
------------------------------
67 | A | B | dec | $x // $y
|-------------|
===> | 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | X | 1 |
有没有办法让我将该条件标记为uncoverable
?在行上方添加uncoverable condition false
修复了覆盖率摘要,但当我查看详细信息时,条件覆盖率仍为 67%。
Devel::Cover 是否处理//
操作员?
另一方面,如果我将die
行更改为等效项:
die "died" if !defined $x && !defined $y;
这条线也被覆盖了 67%。
% | coverage | condition
------------------------------
67 | A | B | dec | defined $x or defined $y
|-------------|
| 0 | 0 | 0 |
===> | 0 | 1 | 1 |
| 1 | X | 1 |
这可能是一个错误吗?