相关疑难解决方法(0)

.NET 4.0代码契约 - 它们将如何影响单元测试?

例如,本文介绍了它们.

有什么好处?

静态分析似乎很酷,但同时它会阻止在单元测试中传递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的更好(终极等)版本中的静态分析.

从本质上讲,它们都归结为编写传统if语句的另一种方式.我实际使用TDD的经验,代码合同显示了原因,以及我如何去做.

unit-testing .net-4.0 code-contracts microsoft-contracts

37
推荐指数
2
解决办法
3992
查看次数

如何在C#中处理代码契约中的异常

我已经开始使用Code Contracts for .NET了.

  1. 我已经安装了msi.
  2. 在我的示例控制台应用程序中,在项目属性中,我将"Assembly Molde"设置为"标准合同要求".
  3. 我已将"执行运行时合同检查"检查为"完整".

有了这个设置,我在我的代码中使用了非常标准的Contract.Require().我不能把它放在try块中,因为它应该放在方法体的最顶层.所以,我的问题是当我不满足"Require()"条件时,我如何处理它可能抛出的异常?

通过正确的输入,我的代码运行良好,使用预期的错误输入,它会抛出一个无法解决的异常.我想我在这里的大局中缺少一些部分,或者我的项目的合同选项可能没有很好.

谢谢你的帮助.

c# code-contracts

3
推荐指数
1
解决办法
694
查看次数