2014-03-24 86 views
4

我正在測試Web服務客戶端,並且需要隔離對Web服務的調用。如何使用Microsoft Fakes隔離Web服務而不使用依賴注入

我已經被告知我們不能使用依賴注入。如何隔離web服務,以便測試調用該服務的業務邏輯。由於我無法控制web服務,因此我需要確保服務返回的價值。

我被告知使用微軟假貨我可以做到這一點,但不知道如何定義假貨。

,我測試代碼的簡化版本是:

var client = new Serviceprovider.ServiceProxies.PromoService.PromoServiceClient(); 
client.ClientCredentials.Windows.AllowedImpersonationLevel = client.Open(); 
Promo promoFromMaps = client.GetPromoById(exitingPm.NetworkId, true, true, true, exitingPm.MapsPromoId); 

我要控制存儲在promoFromMaps值是能夠測試後發生的業務邏輯。

謝謝你的時間。

+0

你有沒有試過這個:http://code.msdn.microsoft.com/windowsdesktop/Unit-Test-a-having-404c2a18 – jparram

+0

看起來你需要填充PromoServiceClient所需的成員。 'ShimPromoServiceClient.GetPromoByIdInt32BooleanBooleanBooleanInt32 =()=>新的Promo()'的東西,儘管你可能想在內部填充一些東西。我無法確切地告訴你需要隔離什麼部分,以及你正在測試什麼部分。我也會推遲一點,因爲即使這樣做,墊片自然也是很醜的代碼。 – Magus

回答

0

它看起來像你應該在主題閱讀以下Microsoft文檔:在參考的ServiceProvider https://msdn.microsoft.com/en-us/library/hh549175.aspx

你需要做的是用鼠標右鍵單擊並選擇添加虛假。這將在您的測試項目中創建一個名爲Fakes的文件夾。之後,整個DLL是僞造的,您可以使用僞造的PromoService通過名稱ShimPromoService。然後,您可以將它設置是這樣的:

ShimPromoService.PromoServiceClient =() => new Client(); //Probably return a mock or something 

這樣,如果你想從PromoServiceClient方法(使用起訂量,NSubstitute等),你可以返回一個模擬。