2009-01-10 113 views

回答

5

创建您的服务,以便它实现一个接口。然后,您可以模拟客户端中的接口,也可以创建接口的虚假实现以用于测试。

+0

刚编辑我的问题,我想测试我的WCF代理 – 2009-01-10 17:26:43

2

我知道这是一个旧帖子,但它是我最近做的事情。在我的情况下,我有一些验收测试与Wcf服务交谈,但我不想使用真实的服务。我确实做了一个blog post就可以了,但这里是低谷。

对于给定对象创建WCF服务的静态类:

public static class MockServiceHostFactory 
{ 
    public static ServiceHost GenerateMockServiceHost<TMock>(TMock mock, Uri baseAddress, string endpointAddress) 
    { 
     var serviceHost = new ServiceHost(mock, new[] { baseAddress }); 

     serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true; 
     serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>().InstanceContextMode = InstanceContextMode.Single; 

     serviceHost.AddServiceEndpoint(typeof(TMock), new BasicHttpBinding(), endpointAddress); 

     return serviceHost; 
    } 
} 

创建一个模拟,并使用它作为一个WCF服务:

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add<ServiceContractAttribute>(); 

var myWcfServiceMock = Substitute.For<IMyWcfService>(); 
var mockServiceHost = MockServiceHostFactory.GenerateMockServiceHost(myWcfServiceMock , new Uri("http://localhost:8001"), "MyService"); 
mockServiceHost.Open(); 
... 
mockServiceHost.Close();