c#WCF测试EntityDescriptor

舍尔

我有一个WCF客户端,可以通过OData获取数据。我想对客户端进行单元测试,并且已经为DataServiceContext创建了一个接口:

internal interface ODataServiceContext
{

    DataServiceResponse SaveChanges(SaveChangesOptions options);

    ReadOnlyCollection<LinkDescriptor> Links { get; }

    ...

}

目前,对于我的测试,我需要伪造该Links财产。我需要至少返回一个LinkDescriptor。有谁知道如何实现这一目标?

现在,我使用NSubstitute伪造该接口:

var context = Substitute.For<ODataServiceContext>();
var list = new List<LinkDescriptor>();
var links = new ReadOnlyCollection<LinkDescriptor>(list);
context.Links.Returns(links);

这适用于针对空Links属性进行测试但是,由于类LinkDescriptor没有公共构造函数并且是密封的,我如何实现向集合中添加链接描述符的呢?

舍尔

最后,我通过反射调用了LinkDescriptor该类的非公共构造函数来做到这一点

var constructors = typeof(LinkDescriptor).GetConstructors(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var descriptor = constructors[1].Invoke(new object[] { null, propertyName, null, entityState }) as LinkDescriptor;

似乎,构造函数的四个参数是:

  • 对象源:源实体
  • 字符串sourceProperty:源实体上的导航属性
  • 对象目标:目标实体
  • EntityStates状态:链接的状态

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章