2013-10-18 56 views
5

我有以下邏輯:如何標記Devel :: Cover無法匹配的// //條件?

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 | 

這可能是一個錯誤?

+0

您運行的是什麼版本傑韋利::蓋的? –

+0

我使用的版本是1.08(草莓Perl 5.18,如果有什麼區別的話) – stevenl

回答

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 
----------------------------------- ------ ------ ------ ------ ------ ------ 
+0

你的回答對我來說很有意義,這就是我原先的想法。但這不是我的報告所說的。你是否運行了那個'uncoverable'規範? – stevenl

+0

@stevenl,啊,沒有。 ...除非我在刪除它後得到相同的結果。 Devel :: Cover 1.08,Perl 5.16.3 – ikegami