Dot-Net

模擬 WCF 服務的簡單方法?

  • May 24, 2021

我有一個使用 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 但在您的測試期間偽裝成真正的服務。這樣,當呼叫方法時,它們會在您的替身對像上呼叫,您可以讓替身返回任何您想要的東西。

引用自:https://stackoverflow.com/questions/406955