2016-05-18 12 views
5

Ich verwende coverage.py, um die Codeabdeckung meiner Tests zu messen. Ich habe die Filialabdeckung aktiviert, aber den Bericht kann ich nicht ganz nachvollziehen.Wie interpretiere ich Coverage.py-Coverage-Ergebnisse von Python?

Ohne Zweigüberdeckung, erhalte ich 100% Abdeckung:

Name       Stmts Miss Cover Missing 
------------------------------------------------------------ 
mylib/queries.py     44  0 100% 

Mit Zweigüberdeckung aktiviert:

Name       Stmts Miss Branch BrPart Cover Missing 
-------------------------------------------------------------------------- 
mylib/queries.py     44  1  20  3 94% 55, 21->10, 53->-48, 59->-58 

Die Quelle in Frage here gefunden werden kann.

21->10 macht Sinn; Die if-Klausel wird nie als False ausgewertet (springt zurück zum Anfang der äußeren for-Schleife).

Aber 53->-48 und 59->-58 haben mich am Kopf kratzen. Was meinen sie?

+0

Es ist wahrscheinlich eine leere Liste innerhalb dieser for-Schleife, so dass es nie den Code innerhalb der Schleife ausführt. – Dan

+0

Hm, ja, die Loops haben in den Testfällen, die ich anbiete, immer etwas zu kauen. Also ist der fehlende "Zweig" der Fall einer leeren Menge? –

Antwort

7

Dans Kommentar ist in der Nähe. Erstens bedeuten die negativen Zahlen einen Ausgang von einer Funktion, die bei dieser Zeilennummer beginnt. Also -48 bedeutet, dass die Funktion ab Zeile 48 beendet wird.

Das Problem sind keine leeren Schleifen: Diese Zweige wären passiert, wenn die Schleifen jemals abgeschlossen wurden. Es sieht so aus, als hätten sie das nicht getan.

BTW: Coverage.py 4.1b3 hat etwas von diesem Verhalten geändert: Sie würden als 53->exit, 59->exit markiert werden. Auch die Zweige selbst könnten anders identifiziert werden. Versuche es.

+0

Ned, danke, dass du dir die Zeit genommen hast, meine Frage zu beantworten, und danke für dieses wirklich nützliche Paket. –

+0

Die Ausgabe in 4.1b3 macht definitiv mehr Sinn, allerdings bin ich immer noch verwirrt von '53-> exit'; Zeile 53 hier ist [eine for-Schleife innerhalb einer Generatorfunktion] (https://gist.github.com/eykd/1d9cbb50f1cae0873bac05e3a20909ea#file-queries-py-L53) und nicht wirklich eine Verzweigung. Was vermisse ich? –

+0

Ihre For-Schleife wird nie beendet, daher wird die Funktion niemals automatisch beendet. Ich bin mir nicht sicher, was es tut. Vielleicht eine Ausnahme? –

Verwandte Themen