我想我可能对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>());
这会引发异常,因为在Cast<IFooBar>()
调用期间,myFilteredFoos
为null.这不是我想的那样吗?我认为FilterCollection
将被调用,然后myFilteredFoos
将是非空的,并允许演员.
FilterCollection
不能返回NULL,这使我得出它没有被调用的结论.另外,当我这样宣布myFilteredFoos
时:
Queryable myFilteredFoos;
返回调用抱怨myFilteredFoos在初始化之前可能会被使用.