利用代码契约编写更好的代码

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:要编写更好代码的途径有很多,其中一种方式就是给代码加上契约。今天推荐的文章就是介绍微软研究院推出的开源Code Contract工具库的使用。

所谓代码契约就是让你用额外的代码来表达应用程序中对业务代码的假设情况,一般可以执行预先条件判断、过后条件判断和对象不可变判断。而微软研究院为.NET提供了这样的工具,即VS的扩展工具Code Contracts for .NET(现在仅支持到2013版)。安装这个工具后,可以在项目属性中看到额外增加的一个选项卡,如下图所示:

1-Code-Contracts-Config

从图中可以看到,我们可以执行两种检查:运行时检查和静态检查。这个也是Code Contracts for .NET提供的三大功能中的两个,还有一个是文档生成器。

运行时检查

这个功能通过提供一个二进制重写器,把你的代码契约注入到程序当中,以便执行过程中对程序进行检查。这种被重写的程序也提高了测试性,因为每个契约都扮演着一个神谕者,可以预言测试是否可能通过。同时一些自动化工具,比如Pex也可以利用契约来生成更加有意义的单元测试,因为不符合预先条件判断的无意义单元测试就不用生成了。

静态检查

这个功能通过提供一个静态检查器,甚至在程序没有运行的情况下,就能判断是否存在违反契约的情况。其既可以检查隐式契约,比如空引用和数组边界,也可以检查显式契约。

文档生成器

这个功能可以把契约信息放到现存的代码注释xml文档中。

在我看来:代码契约有点类似断言,但是比断言要强大;也类似单元测试,但是比单元测试根据底层也是对单元测试的一种补充。

Dirk Strauss的这篇文章有简单明了的示例代码和直观的截图,对于这个工具的使用是一个很好的入门教程。“阅读原文”即可访问这篇文章。

原文地址:http://www.dirkstrauss.com/programming/introducing-code-contracts#.VWCNlvnvO70

posted @   朱永光  阅读(1231)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
历史上的今天:
2006-05-23 星期天成都.NET俱乐部活动的演讲PPT
点击右上角即可分享
微信分享提示