MOQ - предикаты LINQ в методе настройки - PullRequest
21 голосов
/ 26 июля 2011

В моем методе мой репозиторий делает это:

bool isConditionMet = MyRepository.Any(x => x.Condition == true);

Я пытаюсь смоделировать это с помощью MOQ следующим образом:

MyMockedRepository.Setup(x => x.Any(y => y.Condition == true)).Returns(true);

Однако, когда код выполняется,вызов репозитория всегда возвращает false.

Есть ли способ сделать это с помощью MOQ?

** EDIT - Добавление кода для запроса **

Я использую NHibernate такМой метод Any находится в моем базовом хранилище и реализован так:

public virtual bool Any(Expression<Func<T, bool>> predicate)
{
    return Session.Query<T>().Cacheable().Any(predicate);
}

1 Ответ

24 голосов
/ 27 июля 2011

Необходимо сопоставить аргументы вызова, используя 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);
...