21

Ich habe gerade angefangen, einige Komponententests für ein Python-Projekt zu schreiben, das ich mit Unittest und Coverage verwende. Ich bin derzeit nur einen kleinen Teil zu testen, aber die Code-Coverage-Python Einheit Testabdeckung

ich meine Tests ausführen, um herauszufinden versuchen und erhalten die Abdeckung mit dem folgenden

python -m unittest discover -s tests/ 
coverage run -m unittest discover -s tests/ 
coverage report -m 

Das Problem Ich bin mit ist, dass die Berichterstattung ist sage ich 44% Code Coverage haben und Zählen nur die Dateien, dass:

  1. in den Unit-Tests getestet wurden (alle Dateien, die nicht getestet wurden, fehlen und nicht in der Gesamtabdeckung) in der
  2. waren Bibliothek ies in der virtuellen Umgebung und Codeabdeckung der eigentlichen Tests. Sicherlich sollte es nicht die tatsächlichen Tests in den Ergebnissen enthalten?

Außerdem sagt es die Dateien, die nur die ersten paar Zeilen getestet haben in diesen Unit-Tests tatsächlich getestet werden (die die Import-Anweisungen in den meisten Fällen)

Wie kann ich einen realistischere Code Coverage erhalten oder ist es so, wie es sein soll?

Antwort

18

hinzufügen --source=. zum Abdeckungslauflinie. Es beschränkt den Fokus auf das aktuelle Verzeichnis und sucht nach .py-Dateien, die überhaupt nicht ausgeführt wurden.

+4

Danke, das funktioniert für mich! 'coverage run --source = {dir} -m unittest discover -s tests /' deckt {dir} ab. Kann ich aber fragen: Wie wäre es mit den Unterverzeichnissen (rekursiv)? – sunyata

+0

Ich habe festgestellt, dass es möglich ist, mehrere Verzeichnisse/Module zu verwenden: '--source = {dir1}, {dir2}, {etc}' (bitte beachten Sie, dass hinter den Kommazeichen kein Leerzeichen steht). Es wäre dennoch nützlich mit einer rekursiven Option, wenn diese verfügbar ist, wenn neue Module zum Quellcode hinzugefügt werden. – sunyata

+0

Dokumentation: [Coverage.py Befehlszeilenverwendung] (https://coverage.readthedocs.io/en/latest/ cmd.html) – sunyata

1

Wenn Sie nose als testrunner verwenden stattdessen bietet die Abdeckung Plugin für sie

--cover-inclusive  Include all python files under working directory in 
         coverage report. Useful for discovering holes in test 
         coverage if not all files are imported by the test 
         suite. [NOSE_COVER_INCLUSIVE] 

    --cover-tests   Include test modules in coverage report 
         [NOSE_COVER_TESTS]