2012-06-20 2 views
14

Sie wollen unittest -Gehäuse für eine Funktion wie das schreiben:Wie testen Sie Druckanweisungen?

def test_me(a): 
    for b in c: 
     print do_something(a,b) 

Zuerst dachte ich nur die Ausgänge von do_something in einem String zu sammeln und zurückkehr es dann zusammen die gesamte Ausgabe zu drucken und zu testen. Aber es ist nicht immer überzeugend, weil solche Schleifen dazu führen können, dass Ihre Pufferkette sehr groß wird, abhängig von den Umständen. Was können Sie also tun, um die Ausgabe zu testen, wenn sie gedruckt und nicht zurückgegeben wird?

+1

Diese Hilfe? http://stackoverflow.com/questions/5136611/capture-stdout-from-a-script-in-python –

+1

Verwenden Sie die 'yield' Anweisung? –

+0

@Both Kommentare oben: Ich weiß nicht, was ein typischer Ansatz für Unittests ist, beide könnten möglich sein. – erikbwork

Antwort

12

print druckt auf sys.stdout, die Sie Ihrem eigenen Objekt zuweisen können, wenn Sie es wünschen. Das einzige, was Ihr Objekt benötigt, ist eine write-Funktion, die ein einzelnes String-Argument akzeptiert.

Seit Python 2.6 können Sie auch print als Funktion und nicht als Sprachkonstrukt ändern, indem Sie oben in Ihrem Skript from __future__ import print_function hinzufügen. Auf diese Weise können Sie print mit Ihrer eigenen Funktion überschreiben.