Tag: 微软合同

.NET 4.0代码合同 – 它们将如何影响unit testing?

比如这篇文章介绍了他们。 有什么好处? 静态分析看起来很酷,但同时也会阻止在unit testing中将null作为parameter passing的能力。 (如果你是在文章中的例子) 关于unit testing这个话题,如果你现在已经开始进行自动化testing了,现在肯定是没有意义的。 更新 玩过代码合同,我有点失望。 例如,根据接受的答案中的代码: public double CalculateTotal(Order order) { Contract.Requires(order != null); Contract.Ensures(Contract.Result<double>() >= 0); return 2.0; } 对于unit testing,您仍然需要编写testing以确保不能传递null,如果合同是业务逻辑 ,则结果大于或等于零。 换句话说,如果我要删除第一份合同,除非我专门对这个function进行了testing,否则testing不会中断。 这是基于不使用内置于Visual Studio的更好(最终等)版本的静态分析。 基本上,他们都归结为写传统的if语句的替代方式。 我实际使用TDD的经验,代码合同显示了为什么,以及我如何去做。

微软代码合同框架有多成熟?

微软最近在DevLabs上发布了一个商业授权的代码合同框架。 我们有兴趣在我们的项目(主要是C#,一些C ++ / CLI)中使用它们来逐步replace所有的自定义validation代码,但是我很想知道其他人在使用它之前的经验,特别: 你认为这个框架对于大型复杂的商业项目是否足够成熟? 你在使用时遇到了什么问题? 你从中得到什么好处? 目前比现在更痛苦吗? 我意识到,这是一个有点主观的问题,因为它需要意见,但是鉴于这个框架是.NET 4.0的一个非常重要的部分,并且将(可能)改变我们所有编写validation代码的方式,所以我希望这个问题将会被留下打开收集这方面的经验,以帮助我作出一个具体的,可回答的问题的决定: 我们是否应该在下个月开始使用它? 请注意,我们不提供代码API,只有一个Web服务,所以对于大多数代码打破兼容性而言,抛出的exceptiontypes并不是一个问题。 然而,正如我希望更多的人,而不仅仅是我会受益于这个职位和答案,围绕这个领域的任何细节都是值得欢迎的。

ReSharper – 使用Microsoft.Contracts时可能的空分配

有什么方法可以向ReSharper表明由于devise合同需要检查而不会出现空引用? 例如,下面的代码将在第7和第8行的ReSharper中提出警告( Possible 'null' assignment to entity marked with 'NotNull' attribute ): private Dictionary<string, string> _Lookup = new Dictionary<string, string>(); public void Foo(string s) { Contract.Requires(!String.IsNullOrEmpty(s)); if (_Lookup.ContainsKey(s)) _Lookup.Remove(s); } 真奇怪的是,如果你删除了Contract.Requires(…)行,ReSharper消息就会消失。 更新 我通过ExternalAnnotationsfind了解决scheme,Mike在下面也提到了这个解决scheme。 下面是一个如何为Microsoft.Contracts中的函数实现的示例: 在ExternalAnnotations ReSharper目录下创build一个名为Microsoft.Contracts的目录。 接下来,创build一个名为Microsoft.Contracts.xml的文件并像下面这样填充: <assembly name="Microsoft.Contracts"> <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> </assembly> 重新启动Visual Studio,消息消失!