Dot-Net
模擬 WCF 服務的簡單方法?
我有一個使用 WCF 服務的應用程序。現在我想向應用程序添加單元測試。
在某些情況下,我需要模擬 WCF 服務,因為從服務中獲取所需的行為有時很困難(例如,服務會引發特殊異常)。
我可以向 wcf 客戶端添加另一個介面,但這似乎有點傻,因為客戶端呼叫已經在使用一個介面。
有沒有一種簡單的方法來模擬 WCF 服務?比創建另一個介面層並在其中重定向每個 WCF 呼叫更容易嗎?
編輯:大多數答案似乎對 WCF 服務的使用知之甚少,因此需要澄清一下:
要從 ViewModel 使用 WCF 服務,我必須像這樣管理連接:
ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>(""); IMyWcfService proxy = channelFactory.CreateChannel(); proxy.CallMyStuff(); proxy.Close();我不能只將 ViewModel 代理傳遞給 WCF,因為每個事務都需要打開和關閉連接。由於這個原因,使用 RhinoMock/NMock 是行不通的,因為它們需要一個 ViewModel 來獲取代理作為參數,如果你使用 WCF,就不能這樣做。
為什麼不能使用NMock2之類的東西直接模擬
IMyWcfService介面?如果您需要能夠即時創建新實例,請使用工廠對
ChannelFactory<IMyWcfService>客戶端隱藏。通過這種方式,您可以替換工廠,為客戶端提供創建模擬而不是真實代理的工廠。
您可以使用任何模擬框架(如 RhinoMocks 或 NMock)來模擬介面契約,因此如果您的服務實現了 IMyService,那麼您可以使用模擬框架來設置對該介面上的方法呼叫的期望。如果您不熟悉這個概念,那麼您可以簡單地創建一個替代對象來實現 IMyService 但在您的測試期間偽裝成真正的服務。這樣,當呼叫方法時,它們會在您的替身對像上呼叫,您可以讓替身返回任何您想要的東西。