EF6 Spott abgeleitet DbSets
Ich versuche, gelten die neuen Spott von EF6 zu meinem bestehenden code.
Ich habe eine Klasse, die Sie Erweitert DbSet. Eine der Methoden-Aufruf der Basisklasse (BdSet) Create-Methode. Hier ist ein Beispiel-code (nicht die komplette Lösung-oder real-Namen):
public class DerivedDbSet<TEntity> : DbSet<TEntity>, IKeyValueDbSet<TEntity>, IOrderedQueryable<TEntity> where TEntity : class
{
public virtual bool Add(string value1, string value2) {
var entity = Create(); //There is no direct implementation of the Create method it is calling the base method
//Do something with the values
this.Add(entity);
return true;
}
}
Ich bin mocking mit der Test-Doppel-Probe (hier ist der Frieden-code):
var data = new List<DummyEntity> {
new DummyEntity { Value1 = "First", Value2 = "001" },
new DummyEntity { Value1 = "Second", Value2 = "002" }
}.AsQueryable();
var mock = new Mock<DerivedDbSet<DummyEntity>>();
mock.CallBase = true;
mock.As<IQueryable<T>>().Setup(m => m.Provider).Returns(source.Provider);
mock.As<IQueryable<T>>().Setup(m => m.Expression).Returns(source.Expression);
mock.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(source.ElementType);
mock.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(source.GetEnumerator());
Ich habe den CallBase-Eigenschaft auf true, um zu versuchen zu zwingen, den Aufruf der Basisklasse...
Aber ich bekomme immer wieder die folgende Fehlermeldung:
System.NotImplementedException: Das Mitglied 'Erstellen' wurde noch nicht implementiert Typ 'DerivedDbSet
1Proxy' which inherits from 'DbSet
1'. Test doubles für 'DbSet`1' muss der Implementierungen von Methoden und Eigenschaften, die verwendet werden.
Möchte ich den Aufruf von create fallback auf die default-Implementierung in der DbSet.
Kann mir jemand helfen mit, dass?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach etwas Kampf mit den internen Funktionen und async Verweise von mocking einem DbSet ich kam mit einer Helfer-Klasse, die gelöst die meisten meiner Probleme und dienen als Ausgangsbasis für jemanden der Umsetzung.
Hier ist der code:
Und hier ist ein Beispiel (basierend auf dem Namen habe ich vorher gegeben):
Vorschläge zur Verbesserung dieser Lösung ist sehr willkommen.
Hinsichtlich
Dies ist eine modifizierte version basierend auf Andre, der für mich gearbeitet. Beachten Sie, dass ich nicht brauchen, das async-Referenzen. Code fügt alle abgeleiteten Klassen (wenn vorhanden)
Verwendung:
Code:
Microsoft veröffentlichte eine sehr gut erklärte Anleitung bietet eine in-memory-Implementierung der DbSet die eine vollständige Implementierung für alle Methoden, die auf DbSet.
Überprüfen Sie die Artikel in http://msdn.microsoft.com/en-us/data/dn314431.aspx#doubles
TestBlogDbSet