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;
}
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.

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