unit testing: erstellen einer testdatenbank vor jedem test

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

Hallo Zusammen

Ich bin nicht ganz sicher, ob dies der richtige Ort ist für mein Anliegen... Falls nein: bitte Thread verschieben.

Folgendes Problem habe ich:

In meinem python-file verbinde ich zu einer Datenbank, habe verschiedene Klassen (welche dann funktionen haben wie zB hinzufügen, löschen von einträgen).

Nun möchte ich das Ganze testen und zwar so, dass ich immer wieder zuerst eine leere Datenbank herstelle, diese dann mit ein paar selbst generierten variabeln gefüllt wird und danach beginnen die Tests.

Ich möchte dies NICHT in der setUp-Funktion erstellen, weil ich nicht nach jeder testfunktion diese neu kreiieren will, sondern entweder vor jeder Klasse neu erstellen oder aber wenn ich beim nächsten Mal wieder unit tests durchführe.

eine offene Frage wäre: Wie lösche ich beispielsweise diese datenbank im code, wenn sie noch gebraucht wird? es erscheint jeweils eine Fehlermeldung.

Danke für eure Hilfe.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich mache es so, erstelle eine Datenbank (SQlite) im Speicher und führe so den Unittest aus.

Code: Alles auswählen

 >>> data_handler = Datahandler(':memory:')
>>> data_handler.insert_ziehung('2013-03-13', [11, 12, 13, 14, 15, 16, 17],666, 777, 888)
>>> data_handler.get_ziehung()
[(1, u'2013-03-13', 666, 777, 888, u'11,12,13,14,15,16,17')]
Den gesamten Quellcode findest du hier:
http://github.com/MarkusHackspacher/pyL ... handler.py
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Puristen würden sagen, dass es sich bei der Verwendung eines externen Systems - wie eben einer Datenbank - um Integrationstests handelt und nicht mehr um Unit-Tests ;-)

Was Dein Vorhaben anbelangt... hm... das klingt wenig überzeugend! Wenn ein Test auf dem Ergebnis eines anderen aufbaut, dann ist das eigentlich nie gut.

Wieso kann das denn nicht alles in der Setup-/TearDownPhase erledigt werden? Was spricht dagegen?

Handelt es sich evtl. doch eher um Integrationstest, weswegen Du da vielleicht eher ohne Unit-Testing Framework arbeiten solltest?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten