Versteht, dass das eine breite Frage ist - lasst mich das klarstellen. Ich habe ein Repository über eine Schnittstelle mit zwei konkreten Implementierungen offengelegt - einem MockRepository und einem EntityFrameworkRepository .
Jetzt habe ich ein Unit-Test-Projekt, für das alle Tests gegen das Repository entweder ausgeführt werden können, indem Sie über eine Zeile in [TestInitialize]
blättern.
Meine Frage ist im Grunde "Wie soll ich die Tests schreiben".
Folgendes habe ich:
C reate
%Vor%R etrieve
%Vor%U pdate
%Vor%D elete
%Vor%Es funktioniert ok , sowohl für das Mock- als auch für das EF-Repository, aber mein Hauptproblem ist C (Create). Ich bin mir nicht sicher, wie ich eine Add-Operation für mein Repository testen kann. Es fühlt sich nicht richtig an was es macht.
Er wird für das EF-Repository übergeben, aber um es in meinem Mock-Repository passieren zu lassen, musste ich Reflection verwenden, um die ID in der speicherinternen Sammlung zu aktualisieren (böse).
Also - können Sie bitte einen Ratschlag geben, wie CRUD-Operationen auf dem Repository-Muster richtig getestet werden können?
Dies ist eine ASP.NET MVC-Anwendung, .NET 4, C #, Entity Framework 4 und Unit of Work / Repository Patterns.
Danke.
BEARBEITEN
Nur um Leute zu klären, das sind nicht all die Unit-Tests, die ich habe. Ich habe Unit-Tests für meine Service-Ebene sowie Business-Rule-Tests.
Letzteres wird (und sollte) fehlschlagen, wenn meine obigen Repository-Tests fehlschlagen. Das ist der Punkt hier, um die sehr grundlegenden Operationen meiner Repositories zu testen. Bin ich falsch?
Eine Option ist die Verwendung einer speicherinternen DB wie SqlLite, um das Verhalten Ihrer Mappings, Abfragen und Repositories zu testen. Dies wird von Ayende hier diskutiert, obwohl sein Beispiel NHibernate verwendet.
Eine weitere Option, die Ihr augenblickliches Anliegen, die IDs der Domänenobjekte festzulegen, zu lösen scheint, besteht in der Verwendung von Test-Fälschungen. Dies wird von RhysC hier diskutiert.
IMO, sollte dein Test erstellen:
Ich habe viele Komponententests wie deins, der Hauptunterschied ist, dass ich eine tiefe Vergleichsmethode verwende, um Objektinstanzen zu vergleichen. Zum Beispiel sehen meine U-Tests so aus:
Tags und Links c# entity-framework unit-testing repository crud