我想我可能对Moq回调方法的语法有些困惑。当我尝试做这样的事情:
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>());
抛出异常,因为myFilteredFoos
在Cast<IFooBar>()
调用期间为null 。这不是我期望的那样吗?我认为FilterCollection
会被调用,然后myFilteredFoos
将为非null并允许强制转换。
FilterCollection
不能返回空值,这使我得出不被调用的结论。另外,当我这样声明时myFilteredFoos
:
Queryable myFilteredFoos;
Return调用抱怨myFilteredFoos可能在初始化之前使用。