pan*_*nox 4 c# wcf unit-testing web-services mocking
我在服务中引用自动生成的 WCF 客户端。
//Autogenerated Service client
public partial class ServiceClient :
System.ServiceModel.ClientBase<IService>, IService
{
//...
}
//Autogenerated Interface Client
public interface IService {
//...
}
Run Code Online (Sandbox Code Playgroud)
通过以下方式:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我引用该实现是因为我想使用该using语句在代码块末尾释放资源。而且因为IDisposable是在下面ClientBase而且界面不偏。
我的问题是我想模拟ServiceClient(我已经模拟了External WsClientFactory),但由于我使用了该实现,所以我很难做到这一点。
ServiceClient注意:实现中自动生成的方法不是virtual.
班级是偏科的。接口不是。
创建您自己的接口,该接口派生自原始接口并使用IDisposable.
public interface IServiceClient: ICommunicationObject, IService, IDisposable { }
Run Code Online (Sandbox Code Playgroud)
使用您的自定义接口扩展分部类
public partial class ServiceClient : IServiceClient { }
Run Code Online (Sandbox Code Playgroud)
现在您应该能够使用带有using语句的扩展接口
public class ExternalWsClientFactory : IExternalWsClientFactory {
public IServiceClient ServiceClient() {
var wsClient = new ServiceClient();
return wsClient;
}
}
Run Code Online (Sandbox Code Playgroud)