C# Moq der Liste: Hinzugefügte Objekte abrufenC#

Ein Treffpunkt für C#-Programmierer
Guest
 C# Moq der Liste: Hinzugefügte Objekte abrufen

Post by Guest »

Ich habe die folgende Erweiterungsmethode für ein IQueryable erstellt, um sie in Entity Framework DbContext-MOQs in Komponententests zu verwenden

Code: Select all

 public static DbSet BuildMockDbSet(this IQueryable source)
where T : class
{
var mock = new Mock();
var sourceList = source.ToList();

mock.As()
.Setup(x => x.GetAsyncEnumerator())
.Returns(new TestDbAsyncEnumerator(sourceList.GetEnumerator()));

mock.As()
.Setup(x => x.Provider)
.Returns(new TestDbAsyncQueryProvider(source.Provider));

mock.As()
.Setup(x => x.Expression)
.Returns(source.Expression);

mock.As()
.Setup(x => x.ElementType)
.Returns(source.ElementType);

mock.As()
.Setup(x => x.GetEnumerator())
.Returns(sourceList.GetEnumerator());

mock.Setup(s => s.AsNoTracking()).Returns(mock.Object);
mock.Setup(x => x.Include(It.IsAny())).Returns(mock.Object);
mock.Setup(x => x.FirstOrDefault(It.IsAny())).Returns((Expression x) => sourceList.FirstOrDefault(x as Func));

mock.Setup(d => d.Add(It.IsAny())).Callback((s) =>
{
sourceList.Add(s);
}).Returns((T v) => v);

return mock.Object;
}
Das Problem, das ich habe, besteht darin, dass ich, wenn ich ein neues Element hinzufüge, es tatsächlich zur Quellliste hinzufüge, die nicht dasselbe Objekt wie Quelle. Das Durchlaufen der Elemente sollte also die Elemente der Quellliste zurückgeben.
Für die FirstOrDefault-Methode funktioniert dies jedoch nicht. Ich möchte einfach das ursprünglich angegebene Prädikat abrufen und es an die FirstOrDefault-Methode der Quellliste übergeben. Aber ich kann das nicht richtig einrichten.
Image

Die Ausnahmemeldung sagt nur, dass das, was ich tue, ungültig ist, nicht, warum oder wie es sein sollte.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post