7

私は次のロジックを持っています:

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  |

それはバグでしょうか?

4

1 に答える 1

1

それは意味がありません。//パスは 2 つしかありません ($xが定義されている、定義され$xていない)。$yには関係ありません//。だから私はテストを実行しました

test( 1,     2     );
#test( 1,     undef );   # Don't even need this one.
test( undef, 2     );
test( undef, undef );

得た:

----------------------------------- ------ ------ ------ ------ ------ ------
File                                  stmt   bran   cond    sub   time  total
----------------------------------- ------ ------ ------ ------ ------ ------
x.pl                                 100.0  100.0  100.0  100.0  100.0  100.0
Total                                100.0  100.0  100.0  100.0  100.0  100.0
----------------------------------- ------ ------ ------ ------ ------ ------
于 2013-10-18T11:59:31.083 に答える