2013-10-18 6 views
5

Ich habe die folgende Logik:Wie markiert man `//` Bedingungen mit 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); 

Die return Anweisung wird nie für den Zustand abgedeckt werden, wo $x und $y beide nicht definiert sind. So ist die Berichterstattung Bericht weist darauf hin, dass diese Bedingung als ungedeckt:

% | coverage | condition 
------------------------------ 
    67 | A | B | dec | $x // $y 
    |-------------| 
===> | 0 | 0 | 0 | 
    | 0 | 1 | 1 | 
    | 1 | X | 1 | 

Gibt es eine Möglichkeit für mich, diesen Zustand als uncoverable zu markieren? Hinzufügen von uncoverable condition false über der Linie behebt die Coverage-Zusammenfassung, aber wenn ich auf die Details schaue, ist die Bedingungsabdeckung immer noch bei 67%.

Funktioniert Devel :: Cover den Operator //?


Auf einer anderen Anmerkung, wenn ich die die Linie auf das Äquivalent zu ändern:

die "died" if !defined $x && !defined $y; 

, die auch die Leitung wird 67% gedeckt.

% | coverage | condition 
------------------------------ 
    67 | A | B | dec | defined $x or defined $y 
    |-------------| 
    | 0 | 0 | 0 | 
===> | 0 | 1 | 1 | 
    | 1 | X | 1 | 

Könnte das ein Fehler sein?

+0

Welche Version von Devel :: Abdeckung sind Sie? –

+0

Die Version, die ich benutze ist 1,08 (Strawberry Perl 5,18, wenn das einen Unterschied macht) – stevenl

Antwort

1

Das macht keinen Sinn. // hat nur zwei Pfade ($x ist definiert, $x ist nicht definiert). $y ist nicht relevant für die //. Also lief ich einen Test

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

Got:

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

Ihre Antwort macht Sinn für mich, und das ist, was ich ursprünglich dachte. Aber das hat mein Bericht nicht gesagt. Hast du das mit der "uncoverable" Spezifikation ausgeführt? – stevenl

+0

@stevenl, ah, nein. ... außer ich bekomme das gleiche Ergebnis nachdem ich es entfernt habe. Devel :: Cover 1.08, Perl 5.16.3 – ikegami

Verwandte Themen