2009-01-02 29 views
8

我有一个使用WCF服务的应用程序。现在我想给应用程序添加单元测试。简单的方法来模拟WCF服务?

对于某些情况,我需要模拟WCF服务,因为从服务中获取所需的行为有时很困难(例如服务抛出特殊的异常)。

我可以为wcf客户端添加另一个接口,但这看起来有点愚蠢,因为客户端调用已经在使用接口。

有没有简单的方法来模拟WCF服务?比创建另一个界面层并重定向每个单独的WCF调用更容易?

编辑:大部分的答案似乎不知道太多关于使用WCF服务,所以一些澄清:
要从视图模型使用WCF服务,我要管理的连接是这样的:

ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>(""); 
IMyWcfService proxy = channelFactory.CreateChannel(); 
proxy.CallMyStuff(); 
proxy.Close(); 

我不能将ViewModel代理传递给WCF,因为每个事务都需要打开和关闭连接。因为这个原因,使用RhinoMock/NMock将不起作用,因为它们需要一个ViewModel,它将代理作为参数,如果使用WCF,则不能这样做。

回答

9

为什么不能使用类似NMock2的东西来直接模拟IMyWcfService接口?

如果您需要能够即时创建新实例,请使用Factory来隐藏客户端的ChannelFactory<IMyWcfService>。这样你就可以替换工厂,为客户提供一个创建mock而不是真正代理的工具。

+0

+1直接模拟接口。 – 2009-01-02 17:22:17

+0

请提供示例 – PositiveGuy 2013-10-21 03:12:06

2

您可以使用任何模拟框架(如RhinoMocks或NMock)来模拟接口协议,因此如果您的服务实现了IMyService,那么您可以使用模拟框架来设置对该接口上方法调用的期望。如果您不熟悉这个概念,那么您可以简单地创建一个实现IMyService的替代对象,但假装在您的测试过程中是真正的服务。通过这种方式,当方法被调用时,它们将在您的替身对象中被调用,并且您可以随意返回任何您想要的方式。

相关问题