2017-01-31 169 views
3

我正在引用服務中的自動生成的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(我已經模擬外部WsClientFactory),但由於我使用的實施,我很難做到這一點。

注意:自動生成的方法ServiceClient在執行中不是virtual

+0

類是局部的。界面不是。創建自己的接口,該接口從原始接口派生並使用'IDisposable'擴展它。用你的自定義界面擴展部分類,現在你應該可以使用你的擴展接口'using'語句 – Nkosi

+0

哦,男孩!我希望這是一種懶惰的方式來做到這一點。我有11個Web服務參考。謝謝@Nkosi – panox

回答

2

該課程是部分課程。界面不是。

創建您自己的接口,該接口源自原始接口並使用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; 
    } 
} 
相關問題