c# - 如何使用 MSFakes 模拟 ODataClient 的 Expand 方法?
问题描述
我从 Dynamics 365 元数据生成了一个 OData 客户端。我正在为业务逻辑编写单元测试,我想用自定义数据模拟 REST API。
之前我问过如何为 ODataClient 设置假返回数据,我找到了答案:如何设置 MS Fakes 对象的返回值?
一切正常,直到我不得不使用 Expand 关键字查询嵌套数据(使用OData Library 中的 Expand lambda)。
例如,当与 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)
我知道问题是我没有在某处设置垫片或存根,但我找不到正确的替换方法。我试图阅读 OData 源代码,但还没有发现任何有用的东西。
我尝试设置 Accounts ( ShimSystem.AccountsGet
) 的 Getter 方法,但它什么也没做。
任何想法如何进一步解决这个问题?
解决方案
事实证明,我还必须ExpandString
在 OData 客户端的类上设置 shim 方法System
以返回与提供程序本身相同的数据。
推荐阅读
- ansible - 在 Ansible 循环中打印一条消息
- flutter - 在 Firestore (Flutter) 中显示每个元素的总和
- laravel - 如何使用选择在 Laravel 中搜索?
- javascript - 本地文件中的跨域读取阻塞 (CORB)
- google-apps-script - Google Apps 脚本:“错误 401:deleted_client OAuth 客户端已被删除”突然?
- vue.js - 从方法获取数据到vue模型
- css - 如何让我的响应式电子邮件在 Gmail 中工作?
- javascript - 表单未从 querySelector 获取值
- flutter - 领域驱动设计:dart 包冻结给出“失败的断言布尔表达式不能为空”
- spring-boot - 微服务架构——Spring Boot——网关