我有一个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;
似乎,构造函数的四个参数是:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句