2009-04-02 3 views
19

Ich verwende das Entity Framework, um auf meine Datenbank zuzugreifen, und ich möchte den Datenbankkontext in meinen Komponententests überspielen, so dass ich meine Mittelstufenklassen frei von ihrer Abhängigkeit von realen Daten testen kann. Ich weiß, dass ich nicht die erste bin, die nach dieser (Mocking an Entity Framework Model) fragt, aber nach einigem Googeln habe ich den Eindruck, dass es möglich sein könnte, den Kontext basierend auf den Metadaten des Modells zu instanziieren.Mocking Entity Framework Kontext

Hat es jemand geschafft?

+0

Auch beim Erstellen einer anderen Ebene, wie würden Sie speichern Vorgang ausführen - wie EF mMamDbEntities.SaveChanges() verwendet; nachdem die Entity-Referenz eingegeben wurde –

+0

Siehe meine Antwort auf die Frage [Mock Entity Framework-Datenbank] (http://stackoverflow.com/questions/6087857/mock-entity-framework-database/14406546#14406546). Ein Mock-Objekt-Kontext kann mithilfe einer T4-Vorlage aus Ihrem Entitätsmodell erstellt werden. Auf diese Weise werden die normalen POCO-Klassen erstellt, und es kann ziemlich einfach erweitert werden, um einen Mock-Objektkontext und eine Schnittstelle zu erstellen, um sie mit Ihrem konkreten Objektkontext austauschen zu können. – NightOwl888

Antwort

6

Sie können es nur mit Metadaten tun, es gibt einen guten Artikel darüber, und Unit-Tests EF im Allgemeinen, here.

7

Ein bekannter Weg, dies zu tun, ist die Verwendung der Repository pattern. Dies fungiert als eine Ebene über Ihrer konkreten Datenzugriffsimplementierung und bietet einen Platz, um Testdoppelungen zu injizieren.

+1

Selbst mit dem Repository-Muster (was definitiv eine gute Idee ist) möchten Sie vielleicht immer noch einen ObjectContext behalten, um ihn auszunutzen. –

+1

Die Repository-Muster, die ich für EF gesehen habe, verwenden den ObjectContext intern. –

+3

Der ObjectContext sollte normalerweise in Depots als Abhängigkeit eingefügt werden - Repository und Unit of Work sind orthogonal. –