我剛剛開始瀏覽John Robbins的「調試MS .Net 2.0應用程序」,並且因爲Debug.Assert(...)的傳福音而感到困惑。Debug.Assert與特定投擲異常
他指出,實施得當斷言儲存狀態,有點,錯誤狀況,例如:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
現在,個人來說,沒有太瘋狂了,我認爲他這麼愛重申他的測試實際上合理的「商業邏輯」評論,也許「因爲flobittyjam widgitification過程,絕不會發生」。
所以,我認爲我把Asserts看作是一種低級的「讓我們保護我的假設」的東西......假設一個人認爲這是一個測試,只需要在調試中做 - 即你保護自己免受同事和未來的程序員的影響,並希望他們真正地測試事情。
但是我不明白的是,他接着說,除了正常的錯誤處理外,你還應該使用斷言。現在我想象的是這樣的:
Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
我得到的錯誤條件測試Debug.Assert重複?我想我會得到它,如果我們談論的是一個非常重要的計算僅調試雙重檢查...
double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
...但我不明白它的參數測試,這些值得肯定檢查(在DEBUG和Release版本中)...或不。我錯過了什麼?
斷言可以用於*內部*方法調用的參數檢查的方法(由屬於同一個組件的代碼調用),而不是外部的方法調用(由另一個組件調用) 。例如,我可能會斷言Double類型的私有方法參數不是NaN。 – RoadWarrior 2008-10-31 11:48:52