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

时间:2018-05-18 08:02:50

标签: c# .net dynamics-crm microsoft-fakes microsoft-odata

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

以前我问过如何设置ODataClient的假返回数据,我找到了答案:How to set the return value of MS Fakes object?

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

例如,当与Faked ODataClient程序集一起使用时,此查询失败并显示NullReferenceException:

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

如果没有Expand 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)

我知道问题是我没有在某处设置Shim或Stub,但我找不到正确的替换方法。我试过阅读OData源代码,但还没有找到任何有用的东西。

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

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

1 个答案:

答案 0 :(得分:0)

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