【发布时间】:2008-09-14 09:19:44
【问题描述】:
我刚刚开始浏览 John Robbins 的“调试 MS .Net 2.0 应用程序”,并且对他对 Debug.Assert(...) 的宣传感到困惑。
他指出,良好实现的 Assert 存储了某种错误条件的状态,例如:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
现在,就我个人而言,他如此喜欢在没有实际明智的“业务逻辑”评论的情况下重述他的测试,这对我来说似乎很疯狂,也许“由于 lobittyjam widgitification 过程,i
所以,我认为我将 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 版本中)的参数测试,我没有得到它...或者不是。我错过了什么?
【问题讨论】:
标签: c# exception-handling assert