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);

这适用于针对空Linksproperty进行测试.但是,如果类LinkDescriptor没有公共构造函数并且被密封,我怎样才能将链接描述符添加到集合中?

最佳答案 最后我通过反射调用LinkDescriptorclass的非公共构造函数来做到这一点:

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;

看来,构造函数的四个参数是:

>对象源:源实体
> string sourceProperty:源实体上的Navigation属性
>对象目标:目标实体
> EntityStates状态:链接的状态

点赞