我刚刚开始浏览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