檢查邏輯的斷言應始終為真
斷言用於不執行輸入引數的測試,而是用於驗證程式流是否為核心 - 即,你可以在某個特定時間點對你的程式碼做出某些假設。換句話說:用 Debug.Assert
進行的測試應該總是假設測試的值是 true
。
Debug.Assert 僅在 DEBUG 構建中執行; 它是從 RELEASE 版本中過濾掉的。除單元測試外,它必須被視為除錯工具,而不是程式碼契約或輸入驗證方法的替代。
例如,這是一個很好的斷言:
var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);
這裡斷言是一個很好的選擇,因為我們可以假設 RetrieveSystemConfiguration()
將返回一個有效值,並且永遠不會返回 null。
這是另一個很好的例子:
UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;
首先,我們可以假設 RetrieveUserData()
將返回一個有效值。然後,在使用 Age 屬性之前,我們驗證使用者年齡嚴格為正的假設(應始終為真)。
這是斷言的一個壞例子:
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");
斷言不適用於輸入驗證,因為假設此斷言始終為真是不正確的。你必須使用輸入驗證方法。在上面的情況中,你還應該首先驗證輸入值是否為數字。