2012-04-19 83 views
1

我正在測試一個調用函數的WCF應用程序。我需要測試這個功能。我正在爲它創建代理,並且當我嘗試單元測試該方法時,會生成一些異常。我嘗試了下面的代碼,但由於異常而無法測試該方法。 請考慮生成的異常類型不固定。如何在運行時識別預期異常,同時進行單元測試?

[TestMethod] 
[ExpectedException(typeof(Exception),"A Exception is been Generated.")] 
public void TestMethodProxy() 
{ 
IServiceProxy obj=new ServiceProxy(); 
bool result=obj.DisplayMessage(); 
Assert.IsTrue(result); 
} 

請提出了一些很好的解決方案..在此先感謝....

回答

1

您的代碼不會是一個非常有價值的單元測試,純粹是因爲你同時tesing多個單位:

  • WCF客戶端
  • 傳輸到服務
  • 服務信息格式化程序(包括序列化和反序列化)
  • WCF服務主機
  • 您的基於WCF的服務。

這直接導致了你的問題:如果你一次測試多個單元,你怎麼能確定哪個單元失敗?

答案是:你的單元測試應該測試單元。

如果您想測試服務的內部功能,只需在WCF主機環境之外創建該服務的新實例並單元測試即可。如果您想測試您的託管和配置,請創建一個模擬服務,將其託管在WCF中,並使用可靠的客戶端調用該服務。

如果你想讓他們給你有用的信息,你需要將你的測試分解成獨立的單位。

+0

「單位」是一個觀點問題。 我保證我可以將您曾經寫入不同層次依賴關係的任何單元測試挑出來,就像您在這裏完成的一樣。 – Bon 2014-04-29 17:50:31

+0

這裏的教訓不是創建間接的冗餘級別,而是簡單地觀察分離到較小單元的位置,從而更容易地隔離和識別問題的原因。 – 2014-04-30 00:08:11

+0

我同意這一點,但認爲部分總和等於整體並不總是對的。 我的意思是,儘管進行粒度測試很重要,但我認爲同樣重要的是,您可以快速並重復地執行將配置和網絡條件合併到單個「單元」範圍內的測試。 – Bon 2014-05-01 02:16:54

0

我會把一個嘗試捕捉在測試本身並處理所有不同情況的方式。你有這樣更精細的控制

然後,您可以做一個Assert.Fail如果正確的異常沒有在測試中抓

try 
{ 
//Run code that throws exception 
} 
catch(SpecificException ex) 
{ 
    //Assert ex for more details if needed 
    return; 
} 
Assert.Fail(); 
+1

但我只是想在生成異常之後通過測試方法。目前該方法正在失敗。 – Unknown 2012-04-19 04:41:48

+1

是的,你通過考試。如果發現了正確的例外情況,請退出測試 – TGH 2012-04-19 04:42:39

+1

您能舉個例子嗎? – Unknown 2012-04-19 04:43:28

1

單元測試WCF服務不緊靠測試代理剛剛確認WCF內部工作與否。你應該測試的是你的服務方法,只需簡單地新服務和測試它的方法。在這裏,您可以測試您的服務可能拋出的預期異常。

相關問題