.net 4.0 代码契约(Contract)。什么时候使用?他们什么时候浪费时间了?

标签 .net unit-testing .net-4.0 code-contracts

我一直在研究 .NET 4.0 代码契约并在 stackoverflow 上查找有关此问题的问题。

我仍然从未遇到过任何使用代码契约的示例代码,这让我想知道..这真的有用吗?或者也许它是您的代码达到一定复杂性时唯一有用的一个?有人使用代码合约并且真的很高兴他们这么做了吗?

在我看来,所有的代码契约都是关于方法的进出内容的断言,此外还能够尝试找出在编译时进出的值......但是然后这将需要在您的所有方法上添加更多代码..值得吗?

我注意到的一个好处是,在我看来,您可以使用代码契约作为单元测试的第一行...然后,当您编写单元测试时,可以避免编写一些更基本的测试,因为代码契约涵盖了已经……是真的吗?

合约可以与 WCF 调用一起使用吗?我猜不是因为代理是自动与您一起创建的,所以您无法更改。

最佳答案

每当我需要验证输入参数是否需要具有特定值(数字为正,对象不为空)时,我都会使用它们。

对于输出,只要我确定返回值应处于某种状态(例如不为空),我就会使用它们。

在代码中包含契约可确保在出现意外值时抛出异常,而不是在代码中进一步抛出异常,因为意外的假设可能会导致对象意外处于损坏状态。

就我个人而言,我认为这使代码更加简洁。这种表示法使得编写起来少了很多(而不是使用 if(....== null)....)。这样,Contract.Requires 也非常提前地实现了它想要完成的任务。当我看到它时,我知道代码正在评估参数是否处于某种状态。

关于.net 4.0 代码契约(Contract)。什么时候使用?他们什么时候浪费时间了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3111332/

相关文章:

c# - 对 asp.net mvc 中的身份验证非常困惑

c# - 在 C# 中读取 Excel 数据和单元格格式

c# - 属性中的冒号被 XmlDocument 截断了吗?

unit-testing - 通过metaClass覆盖grails Controller 链方法无效

c# - ASP.NET 核心 3.1 |如何使用服务集合进行单元测试并使用 NullLogger 作为 ILogger 实现

c#-4.0 - 如何在 T4 中使用 linq 扩展方法

c# - 如何在 .NET 4.0 中正确使用 async/await

asp.net - 用户在ASP.NET应用程序中使用Entity Framework 4和VB.NET更新记录时设置值

.net - JSON序列化时如何使用JavaScriptSerializer设置格式?

android - 使用 Mockito 进行 Retrofit 2 api 调用的单元测试