8

我对单元测试有相当多的了解。我一直在尝试阅读有关代码合同的信息。它真的有助于单元测试吗?它是否被高估了,尤其是当我们谈论代码合同有助于进行单元测试时。我特指.net 4.0 中的合同。我使用 nunit 进行单元测试。

4

3 回答 3

4

。单元测试基本上是一个合同,上面写着 MyMethod() 接受 X 并期望 Y 将是一个结果,当它不这样做时,单元测试就会失败,并且你作为 MyMethod() 的开发人员会被警告你破坏了里面的东西。代码契约确实可以帮助您编写单元测试,因为契约中的要求使您在编写单元测试时更容易了解它们的要求。然而,代码契约的真正原因不是为了你,而是为了其他使用你创建的 API 的开发者。单元测试让您知道正确的输入和输出,但是当您将代码发布到野外时,单元测试不会随 .dll 一起发布。代码合同给了其他开发人员通过编译时契约和检查了解这些相同的要求的好处。合约可以防止那些倾向于不阅读方法文档而只是开始传递东西的开发人员(我),所以现在他们将通过合约得到积极的警告。

于 2010-07-27T15:46:00.223 回答
4

代码契约可用于您不能使用单元测试的事物(接口契约)。它们被应用在继承链中(你很容易在手动单元测试中犯错误)。它们自动提供文档(这是单元测试无法做到的)。他们可以在生产中提供运行时检查(单元测试不能做的事情)。

另一方面,合同只有在执行时才会失败,因此如果没有单元测试,您就无法保证代码质量(即您的所有代码都可以满足各种合同)。这两个概念是互补的。

于 2011-12-13T13:22:10.913 回答
0

不,我不认为代码合同可以帮助您编写单元测试。单元测试定义了给定动作的行为和约束。单元测试中编写的规范之一可能是方法的参数不能为空。

在这种情况下,您仍然需要编写单元测试。代码契约是实现你的规范的一种方式,但不是唯一的方式。

换句话说,不要假设使用代码契约意味着您不必编写单元测试!如果有人更改或删除了代码合同,您将不会有测试告诉您预期的规范已失败。

于 2010-07-27T15:50:31.580 回答