Подтвердить что ты не робот

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);
}
4b9b3361

Ответ 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);