Ich habe gerade begonnen, Coverage.py Modul zu verwenden und so beschlossen, einen einfachen Test zu machen, um zu überprüfen, wie es funktioniert.Wie benutze ich coverage.py in Python?
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, alle meine Code mit Tests abgedeckt und py.test sagt sie alle passieren. Ich erwarte, dass Coverage.py eine 100% ige Abdeckung anzeigt. Nun, nein.
Nun, Coverage.py nicht test.py-Datei, so dass ich kopiert Testfunktionen zu sample.py
Datei und lief wieder Reichweite:
Dann habe ich diesen Code-Block:
if __name__ == "__main__":
print(sum(2, 4))
print(sum_only_positive(2, 4))
print(sum_only_positive(-1, 3))
und alle Testfunktionen entfernt. Danach zeigt Coverage.py 100%:
Warum ist es so? Sollte Coverage.py keine Testabdeckung zeigen, nicht nur die Ausführungsabdeckung? Ich habe eine offizielle F.A.Q. für Coverage.py gelesen, kann aber keine Lösung finden.
Da viele SO-Benutzer mit Code-Tests und Code-Coverage vertraut sind, hoffe ich, dass Sie mir sagen können, wo ich mich irre.
Ich habe nur einen Gedanken hier: Coverage.py kann einfach beobachten, welche Zeilen des Codes nicht ausgeführt werden, also sollte ich Tests für diese Zeilen schreiben. Aber es gibt Linien, die bereits ausgeführt werden, aber nicht mit Tests abgedeckt sind, so dass Coverage.py hier fehlschlägt.
Wie rufen Sie Coverage/Pytest? –
@Rogalski pytest: 'python -m py.test test.py' und Coverage:' python -m coverage run sample.py' (unter Windows) – Groosha