首页 文章

如何使用Devel :: Cover标记`//`条件无法解决?

提问于
浏览
5

我有以下逻辑:

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  |

这可能是一个错误吗?

1 回答

  • 1

    这是没有意义的 . // 只有两个路径( $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
    ----------------------------------- ------ ------ ------ ------ ------ ------
    

相关问题