1

我正在尝试做这样的事情,但它不起作用,虽然它应该是

A.CallTo(() => partyRepo.Where(o => o.Person != null))
                        .Returns(new[] {new Party()});

使用此确切代码作为参数调用此方法返回一个空的 Enumerable

4

1 回答 1

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()});
于 2011-04-11T13:46:06.383 回答