C# Moq списка: получение добавленных объектовC#

Место общения программистов C#
Ответить
Anonymous
 C# Moq списка: получение добавленных объектов

Сообщение Anonymous »

Я создал следующий метод расширения для IQueryable, чтобы использовать его в moqs Entity Framework DbContext в модульных тестах

Код: Выделить всё

 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;
}
Проблема, с которой я столкнулся, заключается в том, что когда я добавляю к нему новый элемент, я фактически добавляю его в sourceList, который не является тем же объектом, что и исходный >. Таким образом, цикл по элементам должен возвращать элементы sourceList.
Однако для метода FirstOrDefault это не работает. Я хотел бы просто получить любой предикат, который был задан изначально, и передать его методу FirstOrDefault исходного списка. Но я не могу настроить это правильно.
Изображение

В сообщении об исключении говорится только о том, что то, что я делаю, недопустимо, а не о том, почему и как это должно быть.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-objects
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»