23

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

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

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

和:

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

因此,我没有将 实际添加RealService.svc到我的项目中,而是在我的项目中Service Reference添加了一个WCF Service名为Service1.

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

然后我打开Service1.cs文件,而不是让继承自我IService1.cs让它从生成的interface.

然后我没有在我的应用程序中调用真正的服务,而是简单地调用我的Service1类。这就是模拟 Web 服务的工作原理吗..?

还需要弄清楚如何interface使用 svcutil 工具实际生成一个(我读过我不能将 wsdl.exe 用于 WCF 服务?)。因此,任何关于这方面的提示也非常受欢迎!

4

2 回答 2

20

许多需要涉及的领域,将尝试为您指明正确的方向:

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

  • 如果您想模拟您的 WCF 服务(即对使用 WCF 服务的组件进行单元测试),请使用模拟框架NMock2,它允许您模拟服务接口(此处为相关的 SO 线程)。如果您不想使用外部框架,您也可以手动编写模拟代码(通过实现接口) - 但这涉及更多。

  • 如果您想对您的 WCF 服务进行单元测试(即为服务、业务、数据等编写单元测试),请使用流行的模拟框架(相关的 SO 线程在这里)。

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

希望这可以帮助。

于 2013-03-01T10:14:28.537 回答
3

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

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

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

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

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

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

于 2013-03-01T11:49:23.007 回答