我刚刚开始浏览 John Robbins 的“调试 MS .Net 2.0 应用程序”,并且对他对 Debug.Assert(...) 的宣传感到困惑。
他指出,良好实现的断言在某种程度上存储了错误条件的状态,例如:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
现在,就我个人而言,他如此喜欢在没有实际明智的“业务逻辑”评论的情况下重述他的测试,这对我来说似乎很疯狂,也许“由于 florbittyjam widgitification 过程,i <= 3 绝不能发生”。
所以,我认为我将 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");
...但我没有得到它用于肯定值得检查的参数测试(在调试和发布版本中)......或者不是。我错过了什么?