如何测试WCF服务的客户端

我有一个WCF服务,它公开了一个命中数据库的方法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 */ } 

我已经编写了unit testing来测试WCF服务对象,但我想测试消费者代码的各种事情,如时序/性能/error handling,但我不知道如何构建我的测试,使服务没有’击中DB。

我的大多数测试(例如针对服务对象运行的测试)都会创建一个内存中的数据库,但我不知道如何在服务中没有特定于测试的代码的情况下将服务连接到该服务。

我会为你的unit testing创​​建一个测试服务。 通常我在这些情况下做的是为测试项目创建一个与真实相同的配置,除了地址是本地主机,类型将是我的测试服务类:

    

如果您使用的是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)内部,您可以提供测试客户端所需的任何行为,而不必担心您的unit testing会破坏您的生产代码