我想我可能对 Moq Callback 方法的语法有点困惑。当我尝试做这样的事情:
IFilter filter = new Filter();
List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() };
IQueryable myFilteredFoos = null;
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects))
.Returns(myFilteredFoos.Cast<IFooBar>());
这将引发异常,因为在 Cast<IFooBar>()
调用期间 myFilteredFoos
为 null。这不是我想要的效果吗?我认为 FilterCollection
将被调用,然后 myFilteredFoos
将是非空的,并允许转换。
FilterCollection
不能返回 null,这使我得出结论,它没有被调用。另外,当我像这样声明 myFilteredFoos
时:
Queryable myFilteredFoos;
Return 调用抱怨在初始化之前可能使用 myFilteredFos。