2010-02-02 21 views
1

我試圖避免一個脆弱的測試。我想斷言一個方法在傳入無效數據時拋出一個異常,我不關心哪一個。在MSTests中可以捕獲任何異常嗎?

以String.IsNullOrEmpty爲例,如果字符串爲空,則不想拋出nullreference異常嗎?如果它爲空,我想你可以拋出一個argumentException。我不認爲爲null和empty分開使用單獨的保護條款是個好主意,不管我希望能夠斷言我的單元拋出異常。

使用[ExpectedException(typeof(Exception))]給出了一個錯誤,說明異常類型必須從異常繼承。如果沒有異常拋出,我的解決方案是一個帶有Assert.Fail的try/catch塊。有更好的/更清潔的方式嗎?

回答

1

它看起來像嘗試捕捉是唯一的選項來聲明泛型異常拋出。這裏是MSDN線程就這個問題:

http://social.msdn.microsoft.com/Forums/en/vststest/thread/ed891a27-272c-4938-9a93-719c149d820e

我仍然會質疑聲稱對一般異常的需要。如果你正在測試一個特定的場景,你應該知道應該拋出什麼異常。對於使用string.IsNullOrEmpty()的示例,您似乎希望對空字符串和空值都進行測試。如果空字符串是無效輸入,那麼拋出一個ArgumentException似乎是合理的,您可以測試特定的異常。如果字符串是有效的輸入,那麼您可以測試以確保它不會引發異常。

+0

我想我可以看到捕獲特定異常的優點,在這種情況下,我最感興趣的是因爲我沒有什麼好的處理字符串空(空引用異常?)vs字符串空(理論假設)範式,並認爲在這種情況下忽略異常類型並確保引發異常會很好。使測試更加脆弱,但冒着失敗原因錯誤的風險。我想其他測試會抓住'其他原因' – Maslow 2010-02-03 13:36:12

+0

如果測試失敗的原因錯誤,測試不會變得脆弱嗎?測試肯定會少一些「值得信賴」。 – JChristian 2010-02-03 17:33:31