我正在尝试做这样的事情,虽然它应该是
,但它不起作用A.CallTo(() => partyRepo.Where(o => o.Person != null))
.Returns(new[] {new Party()});
使用此确切代码作为参数调用此方法将返回空的Enumerable
答案 0 :(得分:3)
原因是你在调用规范中传递的表达式和实际发送到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()});