Wie verwende ich coverage.py in Python richtig?

Ich habe gerade angefangen, @ zu verwend Coverage.py Modul und so beschlossen, einen einfachen Test zu machen, um zu überprüfen, wie es funktioniert.

Sample.py

def sum(num1, num2):
    return num1 + num2


def sum_only_positive(num1, num2):
    if num1 > 0 and num2 > 0:
        return num1 + num2
    else:
        return None

test.py

from sample import sum, sum_only_positive

def test_sum():
    assert sum(5, 5) == 10

def test_sum_positive_ok():
    assert sum_only_positive(2, 2) == 4

def test_sum_positive_fail():
    assert sum_only_positive(-1, 2) is None

Wie Sie sehen, ist mein gesamter Code mit Tests bedeckt und py.test sagt, dass alle bestanden wurden. Ich erwarte, dass Coverage.py eine 100% ige Abdeckung aufweist. Nun, nein.

Nun, Coverage.py kann die Datei test.py möglicherweise nicht sehen, daher habe ich die Testfunktionen nach @ kopiersample.py Datei und lief Coverage erneut:

Dann habe ich diesen Codeblock hinzugefügt:

if __name__ == "__main__":
    print(sum(2, 4))
    print(sum_only_positive(2, 4))
    print(sum_only_positive(-1, 3))

und entfernte alle Testfunktionen. Danach zeigt Coverage.py 100%:

Wieso ist es so? Sollte Coverage.py nicht Code-Testabdeckung zeigen, nicht nur Ausführungsabdeckung? Ich habe ein offizielles @ gelesFAQ für Coverage.py, kann aber die Lösung nicht finden.
Da viele SO-Benutzer mit Codetests und Codeabdeckung vertraut sind, können Sie mir hoffentlich sagen, wo ich mich irre.

Ich habe hier nur einen Gedanken: Coverage.py kann einfach beobachten, welche Codezeilen nicht ausgeführt werden, also sollte ich Tests für diese Zeilen schreiben. Es gibt jedoch Zeilen, die bereits ausgeführt werden, aber nicht mit Tests abgedeckt sind, sodass Coverage.py hier fehlschlägt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage