测试WCF Web服务?

我想为WCF服务创建一个测试类。 我相信“嘲笑”是正确的用语吗?

我不确定我认为必须这样做的方式是正确的方法。 我得到了一个WCF服务的URL,例如:

http:://somesite.com/wcf/RealService.svc 

和:

 http:://somesite.com/wcf/RealService.svc?wsdl 

因此,我没有将RealService.svc实际添加到我的项目作为Service Reference只是向我的项目Service1添加了一个新的空WCF Service

然后我想使用wsdl.exe (或者可能是svcutil.exe?)工具从WSDL url生成一个接口: http:://somesite.com/wcf/RealService.svc?wsdl

然后我打开Service1.cs文件而不是让它inheritance自IService1.cs我让它从生成的interfaceinheritance。

然后,我只需要调用我的Service1类,而不是在我的应用程序中调用实际服务。 这是一个嘲弄网络服务的工作方式..?

还需要弄清楚如何使用svcutil工具实际生成一个interface (我读过我不能将Wsdl.exe用于WCF服务?)。 所以任何提示都非常受欢迎!

要触摸的许多区域都会尝试指向正确的方向:

  • 如果要测试(即传递输入,validation输出)您的WCF服务,请使用Visual Studio GUI工具WCF Test Client ( 此处为 MSDN文章)。

  • 如果你想模拟你的WCF服务(即unit testing你的组件消耗WCF服务),使用像NMock2这样的模拟框架,它允许你模拟服务接口( 这里是相关的SO线程)。 如果你不想使用外部框架,你也可以手工编写一个模拟(通过实现接口) – 但这涉及更多。

  • 如果要对WCF服务进行unit testing(即为服务,业务,数据等编写unit testing),请使用流行的模拟框架( 此处为相关的SO线程)。

  • 要为您的WCF服务生成代理,请在猜测时使用svcutil.exe命令行实用程序( 此处为MSDN文章)。 此实用程序附带各种选项(语言,命名空间,配置文件等),因此请注意它们。

希望这可以帮助。

您可以使用svcutil.exe生成代理(来自Visula Studio: 添加服务引用… )。 这将生成您的客户端代理和服务接口

例如,您的服务http :: //somesite.com/wcf/RealService.svc?wsdl我们将获得:

  • IRealService(接口)
  • RealServiceClient(实现IRealService并扩展System.ServiceModel.ClientBase)

您可以创建一个实现服务接口(IRealService)的模拟类。

并且在您的应用程序中,而不是在要调用服务时实例化具体服务客户端(RealServiceClient),您可以使用Factory或IOC容器。

通过这种方式,您可以确定应用程序(或模块/组件)使用的实例:运行时的实际服务,测试时的模拟。