В моих модульных тестах я хочу, чтобы у меня была возможность найти функцию «найти» моего репозитория в моей Единице работы, которая принимает лямбда-экспресс. Например:Moq: выражения Лямбда как параметры и оценивать их в возвратах
public virtual IQueryable<T> Find(Expression<Func<T, bool>> predicate)
{
// Find OPS
}
я создал списки тестов, чтобы представить мой dbSets в моих модульных тестах (Также я оставил для себя много абстракции, чтобы сделать это более простым для этого вопроса):
[TestMethod]
public void FindTest()
{
var mockUnitOfWork = new Mock<IUnitOfWork>();
var testList = new List<ListObject>
{
// Test values
}
// Here is where I am stuck:
mockUnitOfWork.Setup(uow => uow.Find(It.IsAny<Expression<Func<ListObject, bool>>>()))
.Returns(/* ???? testList.Where(??????) ???? */);
}
Я хочу чтобы использовать лямбду, пройденную методом, вызывающим поиск макета для поиска в моем издеваемом списке. Это возможно?
EDIT: Спасибо Крису за ответ. Это код настройки, чтобы передать лямбда-выражение, которое передается с помощью метода, который ссылается на функцию Ложная по:
mockUnitOfWork
.Setup(uow => uow.Find(It.IsAny<Expression<Func<ListObject, bool>>>()))
.Returns(new Func<Expression<Func<ListObject, bool>>, IQueryable<ListObject>>(
expr => testList.Where(expr.Compile()).AsQueryable()));
Это сработало! Спасибо. – Channafow
@ChrisMantle: Спасибо! Я тянул свои волосы. Это помогло мне через 4 года! – Razort4x