代码之家  ›  专栏  ›  技术社区  ›  Steven Evers

如何测试WCF服务的客户端

  •  1
  • Steven Evers  · 技术社区  · 14 年前

    我有一个WCF服务,它公开了1个方法 GetNextObjectInList(int id) 达到了分贝。

    WCF服务的工作原理大致如下:

    public class MyService : IDisposable
    {
        public MyService() 
        { 
            this.IntializeDBConnection();
        }
    
        public int GetNextObjectInList(int id) 
        { 
            /* uses DB connection */ 
        }
    
        /* Dispose releases DB connection */
    }
    

    这使得客户端代码相对简单:

    public void UseNextElementInList()
    {
        IMyService svc = new MyServiceClient();
        int nextID = svc.GetNextObjectInList(this.ID);
    
        /* use object */
    }
    

    我已经编写了单元测试来测试WCF服务对象,但是我想测试消费代码的各种功能,比如计时/性能/错误处理,但是我不知道如何构造测试,这样服务就不会碰到DB。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Steve Ellinger    14 年前

    我将为您的单元测试创建一个测试服务。通常,在这些情况下,我要做的是为测试项目创建一个与实际项目相同的配置,但地址将是本地主机,类型将是我的测试服务类:

            <service name="MyNamespace.TestService" behaviorConfiguration="BehaviorConfig">
                <endpoint address="net.tcp://localhost/MySolution/TestService"
                                    binding="netTcpBinding"
                                    bindingConfiguration="BindingConfig"
                                    contract="MyNamespace.IMyService"/>
    

    如果您使用的是VS Test Project,则可以使用ClassInitialize/ClassCleanup属性来设置/删除服务:

        [ClassInitialize()]
        public static void MyClassInitialize(TestContext testContext) {
            mHost = new ServiceHost(typeof(TestService));
            mHost.Open();
            return;
        }
        [ClassCleanup()]
        public static void MyClassCleanup() {
            if(mHost != null) {
                mHost.Close();
            }
            return;
        }
    

    现在在TestService类(它将实现IMyService)中,您可以提供测试客户机所需的任何行为,而不必担心单元测试会损坏生产代码