Repository-Pattern und unit-Tests aus dem Speicher
Habe ich einige Implementierungen von Repository-Muster, sehr einfach und intuitiv, Formular verknüpft anderen Antworten hier im stackoverflow
http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C
http://www.remondo.net/repository-pattern-example-csharp/
public interface IRepository<T>
{
void Insert(T entity);
void Delete(T entity);
IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate);
IQueryable<T> GetAll();
T GetById(int id);
}
public class Repository<T> : IRepository<T> where T : class, IEntity
{
protected Table<T> DataTable;
public Repository(DataContext dataContext)
{
DataTable = dataContext.GetTable<T>();
}
...
Wie kann ich es einstellen, um zu arbeiten aus dem Speicher, wenn dabei die unit-Tests? Gibt es eine Möglichkeit, zu bauen, ein DataContext (Linq-Tabelle von allem, was im Speicher? Meine Idee war, erstellen einer Sammlung (Liste, Dictionary...) und stub, wenn unit-Tests.
Dank!
BEARBEITEN:
Was ich brauche, so etwas wie dieses:
- Ich habe ein Klasse Buch
- Habe ich eine Klasse Bibliothek
- In der
Library
Konstruktor Initialisiere ich das repository:var bookRepository = new Repository<Book>(dataContext)
- Und die
Library
Methoden verwenden Sie das repository, wie in diesempublic Book GetByID(int bookID) { return bookRepository.GetByID(bookID) }
Beim testen, ich will einen Speicher-Kontext. Wenn in der Produktion, werde ich Ihnen eine echte Datenbank-Kontext.
InformationsquelleAutor Kaikus | 2013-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, die Verwendung eines mocking-library wie Moq oder RhinoMocks. Ein nettes tutorial mit Moq kann gefunden werden hier.
Bevor Sie entscheiden, welche Sie verwenden werden, Folgendes könnte helfen:
http://graemef.com/blog/2011/02/10/A-quick-comparison-of-some-.NET-mocking-frameworks/
http://jimmykeen.net/articles/09-jul-2012/mocking-frameworks-comparison-part-1-introduction
Zusätzliche Informationen : Vergleich der unit-test-framework gefunden werden kann hier.
UPDATE folgenden OP ' s Anfrage
Erstellen Sie eine in-memory-Datenbank
Mock-repository (ich habe Moq für das folgende Beispiel)
Einrichten repository
Erstellen Sie ein Bibliothek-Objekt aus, indem Sie Ihre mock-Objekt im Konstruktor-parameter
Und schließlich ein paar tests :
Wenn Sie können, machen Sie kurze Implementierung der Klasse mit Hilfe von repository-es wäre hilfreich,
Also, Wenn ich das richtig verstehe, die Idee ist nicht stub 'Kontext', sondern zu verspotten komplett repository. Dann bei der Instanziierung einer Entität, ich muss immer Spritzen sein eigenes repository (die echte oder die mock) mit dem Konstruktor. Danke!
InformationsquelleAutor Mechanical Object