2009-01-02 31 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的替代對象,但假裝在您的測試過程中是真正的服務。通過這種方式,當方法被調用時,它們將在您的替身對象中被調用,並且您可以隨意返回任何您想要的方式。

相關問題