2008-11-21 6 views
11

Ich bin neu in Komponententests. Aber wie kann ich meine DAL testen, die mit Entity Framework geschrieben wurde, damit ich sicherstellen kann, dass mein DAL-Code korrekt funktioniert, aber keine Datenbank tatsächlich berührt wird? Könnte jemand bitte so viel Details wie möglich geben?Wie teste ich meine DAL korrekt?

Antwort

15

Wenn Sie testen möchten, ob Ihre Datenzugriffsebene richtig funktioniert, müssen Sie sie wirklich irgendwann an einer Datenbank testen, da Sie sonst nicht testen, ob sie funktioniert.

+0

+1 Und wenn eine Test-Datenbank nicht existiert, sollte man wirklich erstellt werden (scheint, als ob das OP über Datenaktualisierungen besorgt ist). –

+1

Was ist die Rolle des Mockens, könnte jemand die Verwendung von diesem gegen die Rolle einer Testdatenbank erklären? –

+2

Mit einer Testdatenbank würden Sie Ihre Integrationstests durchführen (die Tests Ihrer DAL). Mocking würde verwendet werden, um Ihre DAL für Komponententests zu ersetzen, so dass Sie nur die Logik testen, ohne tatsächlich die Datenbank zu treffen (z. B. Sie stellen sicher, dass Ihr Code Ihre DAL korrekt aufruft). – Todd

4

Wenn ich Unit-Test meine DAL Ich verwende Transaktionen und Rollback am Ende des Komponententests, so dass die db ist sauber.

+0

interessant, nie darüber nachgedacht, ich bin mir sicher, dass ich es googlen kann, aber haben Sie einen Codeausschnitt, wie Sie es tun? –

+0

Dies ist jedoch kein Komponententest, sondern ein Integrationstest, der in Ordnung ist. Viele Frameworks führen ihre Integrationstests auf eine separate Testdatenbank mit automatischen Transaktionen für jeden einzelnen Test. –

+0

Führt NUnit diesen automatischen Trans-On-Test durch? Wenn ja, wie konfiguriere ich das, um das zu tun? –

4

Das Testen einer DAL-Einheit ist ein sehr häufiges Problem in der Entwicklung. In den meisten Fällen schlage ich vor, Sie überspringen es.

Die meisten ORMs bieten heutzutage eine Art von Abfragesprache an, sei es LINQ oder HQL oder ein anderer Geschmack. Weil ein richtiger Komponententest erfordert, dass Sie nicht wirklich die Datenbank schlagen, müssen Sie das ORM verspotten, und das ist der größte Schmerz im Esel, den Sie sich denken können. Es ist es nicht wert, IMO. Letztendlich testen Sie nur, dass Sie die richtige Abfrage in Ihren Code geschrieben haben. Sie erhalten überhaupt keinen Regressionswert und können Ihre Zwecke besser durch Einsicht in den Code erfüllen.

Ich sage nicht, dass Sie Ihre Verwendung der DAL nicht testen sollten; Probiere es einfach nicht aus. Sie sollten noch eine Reihe von Integrations- und Benutzerakzeptanztests für Ihr Programm/System haben; Lassen Sie diese stattdessen Ihren Datenzugriff testen.