Frage

Ich benutze einen Codegenerator (Codesmith mit .NetTiers Vorlage) all DAL-Code zu generieren. Ich schreibe Unit-Tests für meinen Code (Business-Schicht), und diese Tests werden immer ziemlich langsam zu laufen. Das Problem ist, dass für jeden Test, ich die Datenbank zurückgesetzt einen sauberen Zustand zu haben. Auch, wie ich eine Menge Tests zu tun, scheint es, dass die Latenzzeit der Datenbankoperationen zu einer ziemlich wenig Verzögerung zusammenzufassen.

Alle DB-Operationen werden durch eine DataRepository Klasse durchgeführt, die von .NetTiers erzeugt wird. Wissen Sie, ob es einen Weg gibt zu erzeugen (selbst oder Code) ein Mock-DataRepository, die stattdessen in-Speicher verwenden würde die Datenbank verwenden?

Auf diese Weise würde ich in meinen Unit-Tests diese Mock-Repository nutzen kann, so dass sie viel zu beschleunigen, ohne tatsächlich etwas zu meinem aktuellen Code zu ändern!

War es hilfreich?

Lösung

Werfen Sie einen Blick auf Dependency Injection (DI) und Inversion of Control Container (IOC). Im Wesentlichen werden Sie eine Schnittstelle erstellen, dass ein neues Mock DB-Objekt implementieren kann, und dann wird der DI Rahmen Ihre Mock DB injizieren, wenn Tests ausgeführt wird, und die reale DB, wenn Sie App ausgeführt wird.

Es gibt zahlreiche freie und Open-Source-Bibliotheken, die Sie um Ihnen zu helfen nutzen könnten. Da Sie sind in C #, eines der neuen und viel versprechenden DI-Bibliotheken ist Ninject . Es gibt zu viele andere. Sehen Sie sich diese Wikipedia-Artikel für andere und eine Beschreibung auf hoher Ebene.

Andere Tipps

Aus der Beschreibung des Problems, ich glaube, Sie den Integrationstest durchführen, weil Ihr Test wird die Verwendung des Business und die DAL und Live-Datenbank zu machen.

Für Unit-Tests, geht man mit einer Schicht von Code mit allen anderen Abhängigkeiten entweder verspottet oder zerdrückte. Mit diesem Ansatz werden Sie Unit-Tests wirklich schnell auf jedem inkrementellen Änderungen am Code auszuführen.

Es gibt verschiedene spöttischen Frameworks, die Sie wie Rhino Mock verwenden können, Moq, Typemock nur einige zu nennen. (In meinem Projekt verwende ich Rhino Mock die DAL-Schicht und Unit-Test-Business-Schicht in Isolation zu verspotten)

Harsha

Einige unserer Unit-Tests Daten verwenden, geholt von XML ist, die aus einer Datenbank generiert wurden db Zugang zu verspotten. DAL-Klassen durch Schein ersetzt werden, weil sie alle gespeichert in einem DI-Container sind.

Die Erzeugung des XML ist ist benutzerdefinierten Code, wenn Sie eine Open-Source-Lösung für diese finden dann bin ich glücklich, es zu hören.

Bearbeiten nach Stefan Antwort: Ich erinnere mich an ein anderes Team mit SQL CE für ihre Testdatenbank

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top