单元测试服务和Mock自动生成的WCF客户端代理



我在服务中引用一个自动生成的WCF客户端。

//Autogenerated Service client
public partial class ServiceClient : 
System.ServiceModel.ClientBase<IService>, IService 
{
//...
}
//Autogenerated Interface Client
public interface IService {
//...
}

以以下方式:

public MyService{
public IExternalWsClientFactory ExternalWsClientFactory {get; set; }
public void MyMethod(){
using (var wsCliente = ExternalWsClientFactory.ServiceClient())
{ 
//... 
}
}
}
public class ExternalWsClientFactory : IExternalWsClientFactory
{
public ServiceClient ServiceClient()
{
var wsClient = new ServiceClient();
return wsClient;
}
}

我引用该实现是因为我想使用using语句在代码块的末尾处理资源。并且由于IDisposableClientBase之下并且接口不是部分的。

我的问题是我想模拟ServiceClient(我已经模拟了ExternalWsClientFactory),但由于我使用了该实现,我很难做到这一点

注意:实现中自动生成的方法ServiceClient不是virtual

该类是分部的。接口不是。

创建从原始接口派生的自己的接口,并使用IDisposable对其进行扩展。

public interface IServiceClient: ICommunicationObject, IService, IDisposable { }

使用自定义接口扩展分部类

public partial class ServiceClient : IServiceClient { }

现在,您应该能够使用带有using语句的扩展接口

public class ExternalWsClientFactory : IExternalWsClientFactory {
public IServiceClient ServiceClient() {
var wsClient = new ServiceClient();
return wsClient;
}
}

最新更新