c# - 如何将防御性编程技术结合在一起?

标签 c# assert code-contracts defensive-programming fail-fast

我想问你的问题很广泛,但同时又很具体。首先,我不得不说,我最感兴趣的是适用于 .net 环境的答案。

好吧,我想提高我生产的代码的水平。现在我主要使用 TDD 和静态代码分析来确保我的代码是正确的。最近我听了 Dino Esposito 关于代码契约的演讲,现在我想将它与其他技术结合使用。在听 Dino 时,我还想起了 Debug.Assert()Trace.Assert()

具体我会问几个问题:

  • 我应该如何编写契约和单元测试以相互补充?
  • 我应该在每个方法中使用代码契约还是只在公共(public)方法中使用?
  • 我应该阻止使用 Debug.Assert() 吗?什么时候可以使用它们? (例如,请注意 .net 中的不变量仅在公共(public)方法/属性退出时检查。因此,可以通过简单的 Assert() 在方法中间进行一些检查吗?)
  • 能否向我推荐一个正确使用所有这些技术的开源项目,因为一张图片描绘了一千个单词?

最佳答案

您应该从研究(相当不错的)契约(Contract)手册开始。

  • 它有一个关于单元测试集成的章节和示例代码。更多信息,如果您点击 Pex 链接。
  • 始终在所有公共(public)成员中使用契约(Contract)。对于私有(private)成员:有时。
  • 您仍然可以使用 Debug.Assert(),但 Contracts.Assert() 将是更合乎逻辑的选择。
  • 示例项目...什么都不知道。但是请查看为 BCL 定义的契约(Contract)。

关于c# - 如何将防御性编程技术结合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298750/

相关文章:

c# - 如何在安装程序之前终止进程?

c# - 什么是 C# 中带有事件和句柄的 visual basic 的等价物

python - 如何使用 assertRaises() 捕获 "TypeError"

c - C程序abort()使.exe访问在终止后被拒绝

c# - 契约(Contract) - 如何要求集合不包含空值

c# - 测试先决条件的不同方法的优缺点?

c# - MS Word,使用 NPOI 库

java - 如何记录断言的真实结果

c# - 捕获的 .NET 异常意外为空

c# - 如何使用 C# 在正文中使用 Microsoft Publisher 发送电子邮件