例如,这个文章介绍了它们。
有什么好处呢?
静态分析听起来很酷,但同时它会防止在单元测试中将null作为参数传递。(如果您按照文章中的示例进行)
顺便说一下单元测试的话题——既然已经实践了自动化测试,那么使用代码约束是否毫无意义呢?
更新
尝试使用代码约束后我有些失望。例如,根据被接受的答案中的代码:
public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);
return 2.0;
}
针对单元测试,您仍需编写测试用例以确保不能传递 null 值,并且在业务逻辑中的约束条件下结果大于或等于零。换句话说,如果我删除第一个约束条件,除非我特别针对此功能编写了测试用例,否则不会导致任何测试用例失败。然而,这是基于未使用 Visual Studio 更好(ultimate等)版本内置的静态分析。
本质上,它们都归结为书写传统 if 语句的替代方式。我的使用经验显示了 TDD 和 Code Contracts 的原因以及我如何实现。
order
的精彩代码审查评论点赞。 - THBBFT