MOQ - LINQ Predicates в методе настройки
В моем методе у меня есть мой репозиторий:
bool isConditionMet = MyRepository.Any(x => x.Condition == true);
Я пытаюсь издеваться над этим с помощью MOQ так:
MyMockedRepository.Setup(x => x.Any(y => y.Condition == true)).Returns(true);
Однако, когда код выполняется, вызов репозитория всегда возвращает false.
Есть ли способ сделать это с помощью MOQ?
** EDIT - добавление кода для запроса **
Я использую NHibernate, поэтому мой Любой метод находится в моем базовом репозитории и реализован как таковой:
public virtual bool Any(Expression<Func<T, bool>> predicate)
{
return Session.Query<T>().Cacheable().Any(predicate);
}
Ответы
Ответ 1
Вам нужно сопоставить аргументы вызова с помощью It.Is
, It.IsAny
или It.IsRegex
.
Например, чтобы возвратить true
для любого предиката, вы можете использовать:
MyMockedRepository
.Setup(x => x.Any(It.IsAny<Expression<Func<T, bool>>>()))
.Returns(true);
Или вы можете сопоставить все выражения, но передать делегат, который вернет значение в зависимости от самого выражения:
Func<Expression<Func<T, bool>, bool> resultFunc = { ... }
MyMockedRepository
.Setup(x => x.Any(It.IsAny<Expression<Func<T, bool>>>()))
.Returns(resultFunc);