例如,本文介绍了它们.
有什么好处?
静态分析似乎很酷,但同时它会阻止在单元测试中传递null作为参数的能力.(如果您按照文章中的示例进行操作)
关于单元测试的主题 - 如果您已经实施自动化测试,那么现在肯定没有任何关系可以代码合同吗?
更新
玩过代码合约后,我有点失望.例如,根据接受的答案中的代码:
public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);
return 2.0;
}
Run Code Online (Sandbox Code Playgroud)
对于单元测试,您仍然必须编写测试以确保无法传递null,并且如果契约是业务逻辑,则结果大于或等于零.换句话说,如果我要删除第一个合同,除非我特意测试了这个功能,否则没有测试会中断.这是基于不使用内置于Visual Studio的更好(终极等)版本中的静态分析.
我已经开始使用Code Contracts for .NET了.
有了这个设置,我在我的代码中使用了非常标准的Contract.Require().我不能把它放在try块中,因为它应该放在方法体的最顶层.所以,我的问题是当我不满足"Require()"条件时,我如何处理它可能抛出的异常?
通过正确的输入,我的代码运行良好,使用预期的错误输入,它会抛出一个无法解决的异常.我想我在这里的大局中缺少一些部分,或者我的项目的合同选项可能没有很好.
谢谢你的帮助.