我已经生成了一个OData客户端代码
OData V4 Client Code Generator
。如果没有MS Fakes,生成的代码无法进行单元测试,因此我从中生成了一个假程序集。现在我有一个问题,即如何实际设置方法的返回值。
生成的代码中的“core”类被称为
System
:
[global::Microsoft.OData.Client.OriginalNameAttribute("System")]
public partial class System : global::Microsoft.OData.Client.DataServiceContext
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.OData.Client.Design.T4", "2.4.0")]
public System(global::System.Uri serviceRoot) :
base(serviceRoot, global::Microsoft.OData.Client.ODataProtocolVersion.V4)
{
this.ResolveName = new global::System.Func<global::System.Type, string>(this.ResolveNameFromType);
this.ResolveType = new global::System.Func<string, global::System.Type>(this.ResolveTypeFromName);
this.OnContextCreated();
this.Format.LoadServiceModel = GeneratedEdmModel.GetInstance;
this.Format.UseJson();
}
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.OData.Client.Design.T4", "2.4.0")]
[global::Microsoft.OData.Client.OriginalNameAttribute("salesorders")]
public global::Microsoft.OData.Client.DataServiceQuery<Salesorder> Salesorders
{
get
{
if ((this._Salesorders == null))
{
this._Salesorders = base.CreateQuery<Salesorder>("salesorders");
}
return this._Salesorders;
}
}
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.OData.Client.Design.T4", "2.4.0")]
private global::Microsoft.OData.Client.DataServiceQuery<Salesorder> _Salesorders;
... continues from here and contains all the strongly typed classes...
}
现在你可以看到
Salesorders
是
DataServiceQuery<Salesorder>
它将Linq表达式作为参数。
我试图手动设置查询,但它不起作用,而且在测试用例中指定实际查询似乎有点多余。基本上,我所需要的就是返回一个列表(或枚举)的方法,就像我可以使用Moq时那样。
编辑:我发现了一篇关于在旧的CRM代码生成器中使用Fakes的旧文章,但在这种情况下对我没有多大帮助(
https://zhongchenzhou.wordpress.com/2012/07/10/dynamics-crm-2011-unit-test-part-2-microsoft-fakes-with-linq-query
)
_client = new ODataClient.Microsoft.Dynamics.CRM.Fakes.StubSystem(new System.Uri(...
_dao = new DataAccess.DataAccess(_client);
using (ShimsContext.Create())
{
var query = from a in _client.Salesorders select a;
ODataClient.Microsoft.Dynamics.CRM.Fakes.ShimSystem.AllInstances.SalesordersGet = (c) =>
{
return new Microsoft.OData.Client.DataServiceQuery<Salesorder>(
};
}