Ich muss EF's DbContext
Mock Mock. Ich benutze the approach here und es funktioniert gut.Wie mokiere ich DbContext mit NSubstitute und dann Hinzufügen/Entfernen von Daten
// mock a DbSet
var mockDbSet = Substitute.For<DbSet<Foo>, IQueryable<Foo>>();
var data = new List<Foo>().AsQueryable();
((IQueryable<Foo>)mockDbSet).Provider.Returns(data.Provider);
((IQueryable<Foo>)mockDbSet).Expression.Returns(data.Expression);
((IQueryable<Foo>)mockDbSet).ElementType.Returns(data.ElementType);
((IQueryable<Foo>)mockDbSet).GetEnumerator().Returns(data.GetEnumerator());
// now add it to a mock DbContext
var mockContext = Substitute.For<MyDbContextClass>();
mockContext.Set<Foo>().Returns(mockDbSet);
jedoch in einigen Tests benötigen ich in der Lage sein mockContext.Set<Foo>().Add(someFoo)
und mockContext.Set<Foo>().Remove(otherFoo)
zu nennen und für die zugrunde liegenden hinzufügen/entfernen Logik zu arbeiten.
Ich versuchte dies:
mockDbSet.When(x => x.Add(Arg.Any<Foo>())).Do(x => data.Add(x.Arg<Foo>()));
aber es wirft mit Collection was modified; enumeration operation may not execute.
So wie ich Additions-/Funktionalität entfernen?
Ich muss zum Kontext hinzufügen/entfernen, nicht überprüfen, dass add/remove aufgerufen wurden (ich weiß, wie das geht). –
Sie sollten den letzten Kommentar in Ihre ursprüngliche Frage als Bearbeitung einfügen, nicht als Kommentar, da nicht jeder die Kommentare liest. – Igor
Ich habe vor kurzem begonnen, diese Hilfs-Bibliothek zu verwenden, und es scheint, dass es Hinzufügen/Entfernen unterstützt. Ich habe es für eine wie 10 Tests derzeit verwendet, so weiß ich nicht mehr https://github.com/scott-xu/EntityFramework.Testing – Stilgar