【问题标题】:How-To Mock WCF Services?如何模拟 WCF 服务?
【发布时间】:2009-01-10 17:20:25
【问题描述】:

如何使用 Rhino Mocks 模拟 WCF 服务代理?

【问题讨论】:

    标签: c# .net wcf unit-testing rhino-mocks


    【解决方案1】:

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

    【讨论】:

    • 我会说这更像是一个集成测试而不是一个单元测试,我不会使用模拟。使用不同的端点创建一个“假”服务并对其进行测试。
    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2011-02-10
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多