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