私は次のロジックを持っています:
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 );
ステートメントは、とが両方とも未定義であるという条件の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 |
それはバグでしょうか?