私はこのようなことをしようとしていますが、うまくいきません。
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()});