A.CallTo метод, который использует выражение в качестве параметра
Я пытаюсь сделать что-то вроде этого, и это не работает, хотя это должно быть
A.CallTo(() => partyRepo.Where(o => o.Person != null))
.Returns(new[] {new Party()});
вызов этого метода с этим точным кодом в качестве параметра возвращает пустой Enumerable
1 ответ
Решение
Причина в том, что выражение, которое вы передаете в спецификации вызова, и выражение, которое фактически отправлено в partyRepo, не будут равны. FakeItEasy не может определить, являются ли аргументы единственными, но использовать метод Equals.
Я не совсем уверен, что будет лучшим обходным путем, вы могли бы сделать что-то вроде этого:
public static class MyArgumentConstraints
{
public static Func<MyClass, bool> ReturnsTrueWhenPersonIsNotNull(this IArgumentConstraintManager<Func<MyClass, bool>> manager)
{
return manager.NullCheckedMatches(x =>
{
return x.Invoke(new MyClass() {Person = "person"}) &&
!x.Invoke(new MyClass() {Person = null});
},
x => x.Write("predicate that returns true for non null person"));
}
}
public class MyClass
{
public string Person { get; set; }
}
С этим расширением вы можете переписать исходную строку:
A.CallTo(() => partyRepo.Where(A<Func<MyClass, bool>>.That.ReturnsTrueWhenPersonIsNotNull())
.Returns(new[] {new Party()});