测试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
我让它从生成的interface
inheritance。
然后,我只需要调用我的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容器。
通过这种方式,您可以确定应用程序(或模块/组件)使用的实例:运行时的实际服务,测试时的模拟。