testing - 什么时候应该使用 Debug.Assert()?

标签 testing exception language-agnostic assertion defensive-programming

我已经成为一名专业软件工程师大约一年了,并获得了 CS 学位。我知道 C++ 和 C 中的断言有一段时间了,但直到最近才完全不知道它们存在于 C# 和 .NET 中。

我们的生产代码不包含任何断言,我的问题是......

我应该开始在我们的生产代码中使用断言吗?如果是这样,什么时候使用它最合适?这样做会更有意义吗

    Debug.Assert(val != null, "message");

    if ( val == null )
        throw new exception("message");

最佳答案

Debugging Microsoft .NET 2.0 Applications John Robbins 有一大部分内容是关于断言的。他的主要观点是:

  1. 自由断言。你永远不会有太多的断言。
  2. 断言不会取代异常。异常涵盖了您的代码要求的内容;断言涵盖它假设的事物。
  3. 写得很好的断言不仅可以告诉您发生了什么和在哪里(如异常),还可以告诉您原因。
  4. 异常消息通常是含糊不清的,需要您通过代码逆向工作以重新创建导致错误的上下文。断言可以在错误发生时保留程序的状态。
  5. 断言兼作文档,告诉其他开发人员您的代码所依赖的隐含假设。
  6. 当断言失败时出现的对话框允许您将调试器附加到进程,这样您就可以在堆栈中四处寻找,就好像您在那里放置了一个断点一样。

PS:如果您喜欢 Code Complete,我建议您继续阅读本书。我买它是为了学习如何使用 WinDBG 和转储文件,但前半部分包含一些提示,可帮助您首先避免错误。

关于testing - 什么时候应该使用 Debug.Assert()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/129120/

相关文章:

testing - pdf表单的自动化测试

R:处理有时会导致 R session 崩溃的函数?

regex - 以正则表达式匹配小时/分钟/秒-更好的方法?

javascript - 是否有任何可公开访问的 JSON 数据源来测试真实世界的数据?

flash - 在 Internet Explorer/Firefox/Chrome 中出于测试目的禁用闪存

testing - 依赖配置数据的 BizTalk 映射?

servlets - FILterChain异常处理

c++ - 安全使用 C++ STL 的规则/指南

algorithm - 在未排序的数组中找到 2 个等于给定总和的数字

algorithm - 需要一些帮助来理解这个关于最大化图形连通性的问题