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 に答える