Причина в том, что выражение, которое вы передаете в спецификации вызова, и выражение, которое фактически отправлено в 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()});