2016-07-07 16 views
2

Während des Coverage.py with Ned Batchelder Python & Test podcast, Brian und Ned kurz diskutiert, dass, wenn Sie mit einer Deckungssumme Tests ausführen müssen, es bevorzugt wird, zum Ausführen von Tests von coverage.py Ausführung die coverage run im Gegensatz zu einem Test Runner mit Abdeckung aufrufen. Warum ist das und was ist der Unterschied?Lauftests von coverage.py vs Laufe Abdeckung von Testläufer


Um etwas Kontext zu formulieren: zur Zeit verwende ich nose Test Runner und führen die Tests mit Hilfe von nosetests Kommandozeilen-Tool mit --with-coverage option:

$ nosetests --with-coverage --cover-html 

Soll ich es tun über die coverage run -m stattdessen?

$ coverage run -m nose 
$ coverage report 
+1

Ich weiß nicht, ob das korrekt ist (also schreibe ich es nicht als Antwort), aber meine Vermutung ist, dass wenn Sie direkt Berichterstattung verwenden, dann sind Sie besorgt mit Berichterstattung und Nase und Sie habe nicht die zusätzliche Abhängigkeit des Plugins. Weniger Kopplung und eine weniger zu verfolgende Version. – mwchase

+1

"einen Test-Runner mit Coverage aufrufen" - Sie haben nicht explizit darüber gesprochen, über welchen Test-Runner Sie sprechen (und vielleicht waren sie auch nicht im Podcast - ich habe es nicht aufgelistet). Ich nehme an, mit dem Test-Runner-Fall vertrautest du dem Testläufer, die Abdeckungsmaschinerie zur richtigen Zeit zu starten (z. B. vor dem Importieren des Testmaterials). Wenn Sie die Abdeckung direkt aufrufen, wissen Sie, dass alles so eingerichtet ist, dass die Abdeckung von Anfang an verwendet wird und jede Zeile so verfolgt wird, wie Sie es wünschen. – mgilson

Antwort

1

Ich glaube, ich bin einzigartig qualifiziert, diese Frage zu beantworten :)

mwchase und mgilson es hat Recht in ihren Kommentaren: mit einem Plugin bedeutet, dass Sie abhängig davon Plugin Verhalten korrekt und verständlich zu sein. Um hilfreich zu sein, werden Plugins ihre eigene Logik haben, die vielleicht die beste Idee war, als sie geschrieben wurden, aber der Testläufer und/oder die coverage.py könnten sich in der Zwischenzeit geändert haben. Die Plugins sind nicht so gut gepflegt wie die anderen Komponenten. Wenn Sie sie vermeiden können, haben Sie weniger Bedenken.

Echte Tatsache: Der Grund, warum ich die Unterstützung für .coveragerc-Konfigurationsdateien an erster Stelle hinzugefügt habe, war, weil ich Funktionen zu coverage.py hinzufügen wollte und nicht darauf warten wollte, dass Plugin-UIs aktualisiert wurden, um sie zu unterstützen.

+0

Aus irgendeinem Grund zeigen die meisten "how to use nose/pytest with coverage" -Befehlsproben da draußen im Internet, wie man einen Läufer mit einem Coverage-Plugin verwendet, ohne zu erwähnen, dass man auch 'coverage run' verwenden kann und es generell ist ein besserer Weg. Danke noch einmal! – alecxe