Testen Von Python-Skripten
Wie Teste ich die STDOUT-Ausgabe eines Python Skripts mit einem Testframework wie doctest, unittest, Nase, etc? Sagen wir zum Beispiel, läuft mein script "todo.py --list" zurückkehren sollte, "den Müll rauszubringen". Ich habe gelesen, jemand trennt sich die STDOUT-Druck Teil das Skript vom Teil, der die Ausgabe erzeugt, die gedruckt werden. Ich bin es gewohnt, Beregnung print-Anweisungen, um alle meine shell-Skripte. Ist es einfach nur eine TDD unfreundliche Angewohnheit, die ich brechen sollten, oder gibt es eine einfache Möglichkeit zum testen für die richtige print-Ausgabe?
- doctest bereits weiß, wie zu handhaben Ausgabe...
- Erste. Suche: stackoverflow.com/questions/3481561/.... Zweite. Suche: Die doctest-Dokumentation (docs.python.org/library/...) sagt: "die Ausgabe auf die Standardausgabe erfasst wird, aber keine Ausgabe auf stderr".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich zwei Möglichkeiten :
Umleiten von stdout während der unittest:
Einen logger zu verwenden für Ihre Ausgaben, und hören Sie es in Ihrem test.
Python-eigenen test-suite macht dies schon ein wenig, und wir nutzen im wesentlichen zwei Techniken:
Umleiten von stdout (wie andere schon vorgeschlagen). Wir verwenden ein context-manager:
Mithilfe der
subprocess
Modul. Wir verwenden, wenn wir explizit testen wollen Umgang mit Kommandozeilen-Argumente. Sehen http://hg.python.org/cpython/file/default/Lib/test/test_cmd_line_script.py für mehrere Beispiele.wenn Sie py.test zum testen. Sie können die "capsys" oder die "capfd" test Funktion Argumente zu führen behauptet gegen STDOUT und STDIN
Mehr details finden Sie in der py.test docs
Hier ist etwas, das schrieb ich eines abends, dass tests Skript ausgeführt wird. Beachten Sie, dass der test deckt die grundlegenden Fälle, aber es ist nicht gründlich genug sein, um ein unittest von selbst. Halte es für einen ersten Entwurf.
Und hier ist das Skript, das getestet wurde, zs.py Dies gilt Muster sucht in einem string ähnlich dem Weg, Biochemiker suchen von mustern in DNA-Daten oder protein-chain-Daten.
Ich könnte auch wollen, schauen Sie sich die TextTest Test-framework. Es konzentriert sich mehr auf funktionale/Abnahme (also weniger zugänglich unit-Test) und stützt sich stark auf eine textuelle Ausgabe. Dieser Weg zur Gewohnheit wird gut :-).