Wie würde ich die Datenbanklogik testen?


12

Ich habe immer noch ein Problem damit, ein kleines Problem in Bezug auf TDD zu lösen.

Ich benötige eine Methode, die einen bestimmten Datensatz mit gefilterten Daten aus der Datenschicht (linq2SQL) abruft. Bitte beachten Sie, dass ich die von linq generierten Klassen verwende, die aus der DBML generiert wurden. Jetzt ist das Problem, dass ich einen Test dafür schreiben möchte.

mache ich:

a) Fügen Sie zuerst die Datensätze in den Test ein, führen Sie dann die Methode aus und testen Sie die Ergebnisse

b) Daten verwenden, die sich möglicherweise in der Datenbank befinden. Wenn Sie sich nicht für diese Logik interessieren, kann dies dazu führen, dass Dinge kaputt gehen.

c) Was schlägst du vor?

Antworten:


7

Variation über (a).

Haben Sie eine Test-Datenbank oder einen Unterabschnitt der Datenbank, die zum Testen verwendet werden kann. Verfügen Sie beim Einrichten Ihrer Tests über eine Routine, die die Datenbank nach Bedarf initialisiert, um mit dem Testen zu beginnen (dies kann gegebenenfalls vor jedem Test erfolgen). Dies kann das Löschen von Daten, das Einfügen von Daten usw. umfassen. Führen Sie dann Ihre Tests aus. Räumen Sie in der Teardown-Phase nach sich selbst auf. Kann beliebig oft wiederholt werden, ohne das Risiko einer Unterbrechung des Live-Systems (keine gute Idee, Daten in der Datenbank zu verwenden, die für andere Zwecke benötigt werden).


1
Gute Antwort. Ich mag es, mit sqlite Wegwerfdatenbanken zu erstellen. Dies ist nicht möglich, wenn Sie Dinge testen möchten, die für die Datenbankimplementierung spezifisch sind (z. B. Trigger), es jedoch ein schnelles und harmloses Einrichten / Herunterfahren ermöglicht.
Bogeymin

1
@bogeymin - Sie können immer noch eine Test-DB mit Triggern einrichten, wenn Sie möchten (Sie können die gesamte Datenbank mit einem Skript während FixtureSetup erstellen)
Yaakov Ellis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.