В моих модульных тестах я хочу, чтобы иметь возможность "найти" функцию моего репозитория в моей Единице работы, которая принимает лямбда-экспресс. Например:
public virtual IQueryable<T> Find(Expression<Func<T, bool>> predicate)
{
// Find OPS
}
Я создал тестовые списки для представления своих dbSet в своих модульных тестах (также я оставил много абстракций, чтобы сделать это более простым для этого вопроса):
[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()));