Ich mache in einer Unittest Methode mehrere Tests. Die dauern auch eine Weile. Deswegen finde ich es unpraktisch, das nur ein einziger Punk ausgegeben wird. Außerdem steht am Ende nur ein "Ran 1 test...", was ja nicht ganz richtig ist.
Für die Punkte mache ich einfach ein sys.stdout.write("."), damit man weiß, das auch was passiert. Am ende bleibt es natülich bei "Ran 1 test..."
Gibt es eine bessere Möglichkeit?
unittest: Counter selber erhöhen...
Naja, *eigentlich* solltest du für jeden Test eine eigene Methode schreiben. Wenn du für mehrere Tests den selben Aufbau benötigst, kannst du mit den 'setUp' und 'tearDown'- Methoden des TestCase-Objektes arbeiten. Eigentlich. Ich weiche von dieser Praxis manchmal ab, wenn der Aufbau sehr lange dauert, und die einzelnen Tests voneinander so weit unabhängig sind, daß ein "sauberer" Neuaufbau nicht unbedingt erforderlich ist. Zusätzliche Ausgaben sind dann halt nur auf dem von dir genannten Weg möglich.
Hoi Jens,
verstehe nicht ganz, was Du meinst. Verwendest Du das unittest-Modul? Dort kannst Du die verbosity ganz einfach festlegen:
Und es wird genau ein Punkt pro Test ausgegeben. Ggf. hilft teilen der Test?
HTH
Christian
verstehe nicht ganz, was Du meinst. Verwendest Du das unittest-Modul? Dort kannst Du die verbosity ganz einfach festlegen:
Code: Alles auswählen
runner = unittest.TextTestRunner(verbosity=1)
runner.run(suite)
HTH
Christian
Ok, jetzt kann ich Dir folgen -- glaube ich.
Wenn die Tests voneinander abhängen, folgen sie zumindest nicht der Philosophie von Regressionstests: Da soll ja schließlich ein Test auf die Nase fallen können, der Rest durchlaufen können und am Ende weiß man was schief lief - aber das ist Dir auch klar.
Jetzt will ich nicht päpstlicher sein als der Papst ... In einem ähnlichen Fall habe ich die Tests schon mal geteilt und dafür Daten für die Einzeltest gespeichert. Dann können die Testroutinen auf diese Daten zurückgreifen. Das kommt zu dem Preis, dass natürlich die Testverzeichnisse recht groß werden.
Zusätzlich zu dem sys.stdout.write(".") kannst Du natürlich auch eine Ausgabe einflechten, die mitteilt, dass sich die Routine gerade in einem Unter- oder Sub-Test befindet -- wobei sich das nicht mit der Punktausgabe verträgt.
Übrigens: unittest schreibt auf sys.stderr aus.
Na ja, also was wirklich Gutes fällt mir nicht ein ...
Gruß,
Christian
Wenn die Tests voneinander abhängen, folgen sie zumindest nicht der Philosophie von Regressionstests: Da soll ja schließlich ein Test auf die Nase fallen können, der Rest durchlaufen können und am Ende weiß man was schief lief - aber das ist Dir auch klar.
Jetzt will ich nicht päpstlicher sein als der Papst ... In einem ähnlichen Fall habe ich die Tests schon mal geteilt und dafür Daten für die Einzeltest gespeichert. Dann können die Testroutinen auf diese Daten zurückgreifen. Das kommt zu dem Preis, dass natürlich die Testverzeichnisse recht groß werden.
Zusätzlich zu dem sys.stdout.write(".") kannst Du natürlich auch eine Ausgabe einflechten, die mitteilt, dass sich die Routine gerade in einem Unter- oder Sub-Test befindet -- wobei sich das nicht mit der Punktausgabe verträgt.
Übrigens: unittest schreibt auf sys.stderr aus.
Na ja, also was wirklich Gutes fällt mir nicht ein ...
Gruß,
Christian
Ein guter Unittest sollte nur eine Sache (idealerweise 1 assert) enthalten und Unittests sollte nicht von einander abhängen. Mache als mehr und kleinere Test-Methoden.jens hat geschrieben:Gibt es eine bessere Möglichkeit?
Stefan