检查逻辑的断言应始终为真
断言用于不执行输入参数的测试,而是用于验证程序流是否为核心 - 即,你可以在某个特定时间点对你的代码做出某些假设。换句话说:用 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");
断言不适用于输入验证,因为假设此断言始终为真是不正确的。你必须使用输入验证方法。在上面的情况中,你还应该首先验证输入值是否为数字。