В предложенном ответе используется It.IsAny <>, который, как нам известно, фирма обязана не использовать.
Итак, я пытаюсь проверить Expression<Func<Foo, bool>>
и запустить его для своей коллекции:
Expression<Func<Foo, bool>> testExpression = exp =>
exp.Bars.Any(a => a.Bar.BarString == barString);
_fooRepository.Setup(f => f.GetAllListAsync(It.Is<Expression<Func<Foo, bool>>>
(exp => exp == testExpression)))
.Returns(Task.FromResult(fooList.Where(testExpression.Compile()).ToList()))
.Verifiable();
Я сделал несколько попыток ответа, но перегрузка возврата предикатом не дает я не могу выполнить его по моему строго типизированному списку.
У меня есть метод, который принимает строку и выполняет лямбду над хранилищем, чтобы получить все совпадающие экземпляры (но ожидающие только одного).
Например:
var foo = await _fooRepository.GetAllListAsync(
f => f.Bars.Any(b => b.Bar.BarString == barString));
Существует некоторая проверка, которая гарантирует, что фактически только один был возвращен - затем возвращается свойство foo (скажем, fooId).
Что У меня проблемы с, настраивает ли макет, где я могу проверить - учитывая список Foo, лямбда-ответ возвращает ожидаемые результаты?
Мой тест в этот момент довольно взломан (я переписывал и работал над этим слишком долго):
const string fooId = "fooId";
const string barString = "barString";
var fooList = new List<FooList>()
{
new Foo()
{
FooId = fooId,
Bars = new List<FooBar>()
{
new FooBar()
{
Bar = new Bar()
{
BarString = barString
}
}
}
},
new Foo()
{
FooId = "other foo",
Bars = new List<FooBar>()
{
new FooBar()
{
Bar = new Bar()
{
BarString = "other bars"
}
}
}
}
};
_fooRepository.Setup(f => f.GetAllListAsync(It.IsAny<Expression<Func<Foo, bool>>>()))
.Returns(Task.FromResult(fooList))
.Verifiable();
Я пытался создать ожидаемое выражение с помощью:
Expression<Func<Foo, bool>> expectedExpression = exp =>
И вот где я зависаю - потому что я не может создать выражение без пота. Я не уверен, как заставить мой fooList выполнять выражение над ним.
Я видел несколько примеров использования лямбды в методе .Returns () - но это не тот путь, по которому я хочу идти, потому что я хочу протестировать метод , не лямбда, я даю тест.
Любое направление будет с благодарностью.