使用Gallio / MbUnit对WCF Web服务进行单元测试

时间:2010-09-02 12:45:53

标签: wcf unit-testing mbunit gallio

我有一个WCF服务,其中有一个简单的Gallio单元测试来调用该服务。但是,我对框架的行为感到困惑。当我第一次启动visual studio并尝试运行单元测试时,我收到以下错误:

  

System.ServiceModel.EndpointNotFoundException:http://localhost:43671/MyService.svc/MyService没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。 ---> System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:43671   ErrorCode:10061

但是,如果我右键单击单元测试项目中的服务引用并执行“更新服务引用”,则会显示一个弹出窗口,说明端口43671上的ASP.NET开发服务器已启动,单元测试工作正常

如何将服务器启动代码添加到我的单元测试中,这样每次我想运行单元测试时都不需要“更新服务引用”?

感谢。

2 个答案:

答案 0 :(得分:3)

这是因为运行visual studio时未启动WCF服务主机。尝试更新服务引用后,Visual Studio会自动启动WCF服务主机,之后可以访问您的服务。

解决此问题的一种方法是在IIS中托管您的服务。这将确保即使VS未运行也可以访问服务。

其他解决方案是向您的服务添加引用(程序集引用)并直接实例化服务类。您无需运行该服务即可对其运行单元测试。因此,如果您有一个名为SomeServiceClass的服务类,您可以在单元测试(SomeServiceClass instance = new SomeServiceClass())中创建此类的实例,并针对它编写您的断言(甚至不托管服务)。

答案 1 :(得分:0)

您可以使用ServiceHost自行托管服务。如果您在单元测试的启动代码中使用它,则WCF服务将托管在单元测试中。

我不确定app.config对于您托管的单元测试的位置。但是,您始终可以在单独的AppDomain中运行该服务,并设置AppDOmainSetup.ConfigurationFile