2015-10-05 46 views
1

我已經構建了一個控制檯行應用程序來導入CSV數據,驗證一組約束,然後將其添加到數據庫中,如果它通過所有驗證。因此,我已經開發了通用類等幾類: -C#.NET單元測試 - 如何停止執行捕獲

  • 測試數據不太長
  • 測試數據相匹配的正則表達式
  • 測試數據存在

這些都有他們自己的try-catch塊,並且在try-catch塊中,我已經將它設置爲通過Exception發送一封電子郵件到一個通用收件箱。這是它啓用時的一個要求,所以我們知道是否某件事情失敗了。

我已經編寫了單元測試來調用這些函數,並故意調用這些函數以打破它們,以查看應用程序如何執行以及這些測試的結果。但當然,當它打破它擊中例外,然後發送給我這封電子郵件。這正在破壞我的測試,每次測試都從< 1ms變爲10-15secs,並且我們每次測試都會收到這些垃圾郵件。然而,我們需要在項目正式進行時保留這些測試。

有什麼方法可以指定測試不會發送電子郵件,或者#debug命令是否可以在這裏使用?

謝謝, 邁克。

+0

如果代碼不斷拋出異常,將try catch中的每個方法包裝都會產生性能問題。請參閱這裏,http://stackoverflow.com/questions/32394582/wrap-every-method-in-try-catch-or-specific-part-of-code – Haris

+2

@在這種情況下,邁克正在做一些有意義的事情,所以*應該*抓住。捕獲的性能沒有例外是比你想象的更少的開銷(參見:http://stackoverflow.com/q/1308432/50447) –

+0

@RowlandShaw感謝您的鏈接,這很有趣! – Haris

回答

4

正確的答案是將你的電子郵件發送到一個可以通過構造函數注入到你的類中的接口。然後,您可以使用像Moq這樣的框架來爲您的單元測試嘲諷該接口,從而允許您驗證是否發生了對IEmailer.Send的調用,而無需實際發送這些電子郵件。

+0

謝謝你,我要去研究並讓你知道它是如何發生的。 –

+0

沒問題,如果你覺得喜歡冒險的話,看看SOLID的原則,他們會爲你的發展帶來革命性的變化,而且實際上並沒有那麼難。 –

+0

當然,也應該將測試分開,以便一些測試檢查您是否爲不同類型的錯誤輸入獲取了正確的例外,另一個測試檢查是否報告/記錄/處理了正確類型的例外通過模擬/注入方法 –

相關問題