unittest: Counter selber erhöhen...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Jens,

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)
Und es wird genau ein Punkt pro Test ausgegeben. Ggf. hilft teilen der Test?

HTH
Christian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Genau das ist das Problem: es wird ein Punkt pro Test ausgegeben, aber ich hab eigentlich in einem Test mehrere Dinge.
Das ist zusammen in einem Test, weil sie von einander abhängen.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

jens hat geschrieben:Gibt es eine bessere Möglichkeit?
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.

Stefan
Antworten