如何使用 MSFakes 模拟 ODataClient 的扩展方法?



我从 Dynamics 365 元数据生成了一个 OData 客户端。我正在为业务逻辑编写单元测试,我想用自定义数据模拟 REST API。

之前我问过如何为 ODataClient 设置假返回数据,我找到了答案:如何设置 MS Fakes 对象的返回值?

一切正常,直到我不得不使用 Expand 关键字(使用 OData 库中的 Expand lambda)查询嵌套数据。

例如,当与伪造的 ODataClient 程序集一起使用时,此查询将失败并出现 NullReferenceException:

IQueryable<Insurance> insurancesQuery = from i in _client.Insurances
.Expand(i => i.Account_id)
select i;

如果没有扩展 lambda,一切都按预期工作。

如果我这样做:

IQueryable<Insurance> insurancesQuery = from i in _client.Insurances
.Expand("account_id")
select i;

然后我得到一个带有堆栈跟踪的NullReferenceException

> at lambda_method(Closure , Ecr_insurance )    at
> System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()    at
> System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)   
> at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

我知道问题是我没有在某处设置垫片或存根,但我只是找不到正确的替换方法。我尝试阅读 OData 源代码,但尚未找到任何有用的内容。

我尝试设置帐户(ShimSystem.AccountsGet)的Getter方法,但它没有做任何事情。

任何想法如何进一步解决这个问题?

事实证明,我还必须在 OData 客户端的System类上设置ExpandString填充程序方法,以返回与提供程序本身相同的数据。

最新更新