斷言。我正在使用的代碼斷言驗證的假設,並拋出給我很好的消息,像這樣:斷言在代碼 - 在嘗試捕捉
int IntegerDivide (int dividend , int divisor)
{
Debug.Assert (divisor != 0);
return (dividend/divisor);
}
(來自爲例Assertions in Managed Code)。
現在我只是想知道是否可以使用它來檢查不應該拋出異常的代碼。像這樣的東西可以做到:
try
{
//code
}
catch (exceptionThatShouldntHappen ex)
{
Debug.Assert(false,"This exception should never happen!")
}
這樣做了嗎?我的意思是,顯然只有有例外的代碼纔有意義,否則它就會崩潰。但這是關鍵,你可以想象調用代碼將會捕捉到各種各樣的異常,但有些並不意味着會發生。無論調用者如何捕捉它們,您都要確保這些異常總是會中斷,以免在調試中。
我會去更詳細的例子:假設我有一個數據訪問類 類。它可以拋出各種例外。
調用代碼因此會捕獲異常。有時(或大多數時間?),調用代碼將不會有足夠的信息,或在意, 可能有哪些例外。我的意思是,無論如何,失敗的FindRecord()。你趕上 並返回一個錯誤頁面或消息,甚至回退。
但在數據訪問邏輯中,應該不會發生一些錯誤(假設文件未被發現,如果該文件被假定爲在之前被檢查過)。那是什麼時候發生的。你斷言,所以無論上游代碼如何捕獲異常,它在調試過程中都會中斷 - 這是什麼斷言。
最後,如果這種做法有意義,我想知道什麼是最好的方法來做到這一點。在整個地方添加try-catch
必須有很大的影響(對於沒有嘗試捕捉的方法)。 #if DEBUG
圍繞try-catch
看起來醜陋地獄。
雖然不同的語言,他們基本上是一樣的問題。核心思想:只是忽略它 - 如果拋出異常,測試會自動失敗。 –
@JeroenVannevel關鍵是'Debug.Assert'會導致調試器斷言斷言失敗(處理異常通常*不*斷開) – Rob
@Rob然後在調試模式下執行測試..我錯過了什麼嗎? –