我想问你的问题相当广泛,但同时也非常具体。首先,我必须说,我最感兴趣的是适用于 .net 环境的答案。
好吧,我想提高我所编写代码的水平。现在我主要使用 TDD 和静态代码分析来确保我的代码是正确的。最近我听了 Dino Esposito 的关于代码协定的演讲,现在我想将其与其他技术结合使用。在听 Dino 的演讲时,我还回忆起了 Debug.Assert()
和 Trace.Assert()
。
为了更具体,我会问几个问题:
- 我应该如何编写契约和单元测试来相互补充?
- 我应该在每个方法或只在公共方法中使用代码协定?
- 我应该防止使用
Debug.Assert()
吗?什么情况下可以使用它们?(例如,注意到在 .net 中不变量仅在公共方法/属性退出时才会被检查。因此,通过简单的Assert()
在方法中间进行一些检查是否可以?) - 您能否推荐给我一个开源项目,其中所有这些技术都得到了正确使用,因为图画千言万语呢?
Debug.Assert
永远不会到达生产环境。你只能在开发/测试环境中找到它的错误。如果这样一个断言可以捕获的错误到达了线上环境,那么它将使您的重现变得更加困难。使用它而不是可用于发布的断言是一种优化步骤,而过早的优化从来都不是好事。 - Merlyn Morgan-GrahamTrace.Assert()
代替Debug.Assert()
。 这是MSDN对此的解释: - Igor Soloydenko