Testen mit unittest

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
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Hallo,

für eine Reihe von zusammengehörigen Tests habe ich eine Klasse von unittest.TestCase abgeleitet, wobei ich für jeden einzelnen Test eine eigene Testmethode vorgesehen habe. Das ganze sieht verkürzt also etwa so aus.

Code: Alles auswählen

class ExportTest(unittest.TestCase):
    def test_db_export_raw_with_wildcard_formatted(self):
    def test_db_export_raw_with_wildcard_unformatted(self):
    def test_db_export_raw_projection_formatted(self):
Ich teste damit Exports, die auf Grundlage der Daten in einer Datenbank durchgeführt werden. Alle diese Tests basieren auf denselben Daten und machen Ähnliches, weshalb ich sie in einer Testklasse zusammengefasst habe, d.h. sie haben alle dieselbe Fixture. Die Daten werden nur für den Test in die Datenbank gespielt und anschliessend wieder zurückgesetzt. Mein Problem ist jetzt, dass für den Test jeder Testmethode setUp() und tearDown() aufgerufen werden und dieselben Daten in die DB spielen bzw. zurücksetzen.

Gibt es eine Möglichkeit, setUp()- und tearDown()-Funktionalität so zu definieren, dass sie pro Testklasse nur einmal aufgerufen werden? Ich habe das jetzt erstmal durch statische Klassenvariablen gelöst:

Code: Alles auswählen

class ExportTest(unittest.TestCase):
    setUpDone = False

    def __init__(self, method):
	   self.currentMethod = method
	   unittest.Test.__init__(method)

    def setUp(self):
	   if not ExportTest.setUpDone:
	      ExportTest.setUpDone = True 
	      # import test data

    def tearDown(self):
       if self.lastTest():
	      # restore original DB contents
Dabei muss lastTest() überprüfen, ob dies der letzte Test innerhalb dieser Klasse ist, indem der Wert von "currentMethod" mit dem Namen der letzten test*()-Methode verglichen wird.

Obwohl das funktioniert, erscheint mir das etwas umständlich, bzw. ich habe das Gefühl, am Framework vorbeizuprogrammieren. Hat jemand Vorschläge, wie ich das Verfahren vereinfachen könnte? Ist unittest für so etwas überhaupt das richtige Werkzeug?

Danke im Voraus

ws

P.S.: @Gerold: Danke für den Hinweis auf das Code-Highlighting, ich hatte mich schon gefragt, wie die anderen Poster das 'reingekriegt haben :D
Zuletzt geändert von ws am Montag 21. August 2006, 12:47, insgesamt 2-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi WS!

Bitte schließe deine Codes in Code-Tags ein.
Siehe: Codehighlighting

Du kannst deine Beiträge über den Knopf [Edit] nachbearbeiten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten