是否有一个用于JavaScript的代码契约库?
有很多表单验证库和jQuery插件.尽管我找不到代码合同库,用于验证函数参数. 为例,要在.NET中进行合同验证,您可以使用未出色的条件库.我正在寻找JavaScript类似的东西.我能找到的最接近的是 speks ,但它适用于Node.js,并准备进行测试,而我需要将验证烘烤到发行代码中. 我需要的验证方法的示例:检查空,空,isstring,isnumber,长度,最小,最大值,小于,大于,大于,不等于,不小于,不大于,不大./p> 解决方案 这是一个运行时类型的合同库,它在某些Haskell上进行了一些语法: http:http:http:http:http:http:http:http://code.google.com/p/ristretto-js . 其他解决方案 我对这个问题的实现印象深刻: javascript代码合同库? 示例: function syncTime(serverTime, now) { Verify.valu
10 2024-01-15
编程技术问答社区
合同类应该是一个抽象的类
以下代码给我警告Contract class 'FooContracts' should be an abstract class.从我在线阅读的所有示例中文章/代码合同-csharp ),这应该有效(大概没有编译器警告). [ContractClass(typeof(FooContracts))] public interface IFoo { void Bar(string foo); } [ContractClassFor(typeof(IFoo))] internal sealed class FooContracts : IFoo { void IFoo.Bar(string foo) { Contract.Requires(foo != null); } } 我在Visual Studio 2010中,在项目属性的Code Contracts部分中进行以下设置: 执行运行时合同检查(设置为Full) 执行静态合同检查(根据Static
2 2024-01-09
编程技术问答社区
代码合同。抽象类中的不变量
我在使用代码合同的不变时遇到了问题. 我想在我的抽象类中定义一个不变性,但简单地被忽略了.下面的代码显示了我的界面和抽象类. [ContractClass(typeof(IPointContract))] interface IPoint { int X { get; } int Y { get; } } [ContractClassFor(typeof(IPoint))] abstract class IPointContract : IPoint { public int X { get { return 0; } } public int Y { get { return 0; } } [ContractInvariantMethod] private void PointInvariant() { Contract.Invaria
0 2024-01-09
编程技术问答社区
如何在.NET核心中正确使用代码合约
我想知道,如何在 .NET Core 中正确使用代码合同,到目前为止,我尝试将CC添加到我的项目,编译和调试中.我对消息感到困惑,这是在每个呼叫中​​都出现的,使用Contract.Requires,以及通过谷歌搜索找到的信息. 消息指出: 必须使用代码合同二进制重写器(ccrewrite)重写一个组件,因为它调用Contract.Requires> and CONTRACTS_FULL符号.从项目中删除CONTRACTS_FULL符号的任何明确定义并进行重建. ccrewrite .... 我可以看到,项目属性中没有CC选项,而且我可以看到CC的GitHub存储库几乎已经死了.有什么方法如何成功使用.NET Core中的CC? ,如果没有,有什么简单的方法可以替换它们?我使用Contract.Requires和ContractClassAttribute.更换Contract.Requires是显而易见的,但是 ContractClass
2 2024-01-08
编程技术问答社区
.net core中支持代码合约吗?
在.NET框架中,有代码合同使我可以在我的代码中指定pre/post conditons.它们是否在.NET Core/.NET 5? 中支持它们 解决方案 名称空间System.Diagnostics.Contracts可用,但是项目 dasted . 替代VS2019 softwarerecs.stackexchange.com/questions/47108/the-best-code-contracts-alternative-for-vs-2017-2019-and-2019-and-net-net-core-projects 讨论.NET Core 是代码合同仍然是2020年推荐的方法
0 2024-01-08
编程技术问答社区
.NET核心。代码合约方法暂时关闭?
几年前,有很多有关代码合同的信息.我没有时间学习它,而这次才发现:) 但是,当我尝试使用它时,我知道,Visual Studio 2017不支持它,CC工具上次上次更新3年前... 那么,代码合同目前已关闭? 解决方案 可悲的是,不再支持代码合同. 好消息是,C#8将包括一个新的>无效的参考类型功能将处理使用代码合同的大部分不变性以及条件和后条件.这将有助于检测并避免可能的无效参考异常. 坏消息是没有对其他类型合同的内置支持,并且没有宣布未来的合同. 正确的保证将必须来自第三方工具,否则必须使用其他语言(例如, ada spark ).
2 2024-01-08
编程技术问答社区
我可以把合同留在我与非代码合同开发者使用的代码库合并的代码中吗?
在过去的几个月中,我一直在为我的公司开发一个附带项目,但是更高的人现在认为这对现有产品非常合适. 我一直在使用Microsoft的静态类型检查代码合同来开发附带项目(部分是因为我以前没有使用过它们,并且渴望学习). 我的问题是,如果我使用已有合同的代码核对代码库,其他每个开发人员是否需要安装的代码合同工具才能继续开发?我知道一个事实,他们都没有安装它,而我是这里的大三学生,所以我怀疑我能说服他们所有人. 我正在使用.NET 4.5,因此包括代码合同库,但我想知道Visual Studio是否会抱怨它们每次构建构建时都没有在构建选项中指定的CONTRACTS_FULL ,或者,如果我在构建选项中留下CONTRACTS_FULL,那么当另一个开发人员试图构建时会发生什么?此外,我想知道当合同失败时,最终产品将如何行动,但尚未使用Code Contrents Rewriter构建代码. 我只用一个项目创建了一个新解决方案.创建了一个简单的函数,该功能发射了违反代码合同的
2 2024-01-08
编程技术问答社区
代码合约-重写器因缺少引用而失败
我正在尝试为某些库中使用代码合同.我的库a具有对第三部分库B的引用B.库c引用a,从不使用B,也不使用使用B的位.重写器失败了,尽管试图找到库B.希望重写者对此感到满意. 关于我如何构建它的任何想法,而没有将B中的位移到自己的组装中的A中? 编辑:要回答一个问题,是的,A中有一些公众类型,可以在B中暴露类型.我希望分析能够在图书馆a结束,并且它会像没有参考程序集一样对待B完全(即忽略它). 解决方案 似乎没有办法解决这个问题.在某些方面,我认为它很好,因为它可以帮助您看到第三方依赖的泄漏.
0 2024-01-07
编程技术问答社区
代码合同。可能在一个空引用上调用一个方法
我正在与我的代码: ( ascii版本) P> 该工具告诉我instance.bar可能是一个无用的参考.我相信相反. 谁是对的?我怎么能证明这是错误的? 解决方案 更新:似乎问题是不支持静态字段. . 第二更新:下面概述的方法是当前推荐的解决方案. 可能的解决方法是为instance Ensure s创建一个您想要保留的不变性的属性. (当然,您需要Assume才能证明Ensure.)一旦完成此操作,就可以使用该属性,所有不变性都应正确证明. 这是您使用此方法的示例: class Foo { private static readonly Foo instance = new Foo(); private readonly string bar; public static Foo Instance // workaround for not being able to put invariants on s
2 2024-01-07
编程技术问答社区
代码合同--不错,处于边缘,但还没有准备好进入黄金时间?
我真的被.NET 4中引入的代码合同所吸引(尽管在DevLabs的帮助下).但是一个精美的印刷品使我散发了很多东西.这就是它所说的: 当邮政在螺纹安全方法中被称为锁定外,当前没有解决问题. .net依赖二进制重写器,从而使构建较慢. 使用代码合同也可能会导致运行时性能命中. 不能用于对安全敏感的检查,因为可以通过处理Contractfailed Event在运行时进行规避. 对我来说最大的是第一个.我不知道是否有人编写单线读取应用程序了.因此,如果代码合同无法支持多线程,我认为它们不会太多使用.或者,也许我不应该对此感到太大的压力,因为后条件是为了主张该方法本身的内部,可以进行单位测试. 顺便说一句,我什么都没找到,也没有尝试拆卸我的代码来查看在何处注入的先决条件.我想,当锁定()首先时,在一个简单的方法中,立即注入检查很容易,但是在相当复杂的方法中,当锁定发生在中间的某个地方时,这可能是一个问题.或使用锁()以外的其他机制. 解决方案 当前在锁定
4 2024-01-07
编程技术问答社区
在.NET 4.0中,代码合约的实际用法是什么?
为了充分理解和利用新的.NET Framework 4.0的到来所提供的新功能和增强功能,我想获得 Real-World 应用 a href =" http://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.aspx" rel =" noreferrer">代码合同. 有人有一个很好的示例,可以应用此功能? 我想用简短的解释来获取一个代码样本,以帮助我开始运行. 解决方案 来自 合同允许您在运行时代码中的代码中表达前提,后条件和对象不变性 检查,静态分析和文档. 代码合同用于静态验证;想象一下 - 在编译时 - 您不仅遇到了语法错误,还遇到了逻辑错误.这是静态程序验证的愿景. 现实世界示例 您可以使用合同(和静态验证)来降低测试成本...特别是回归测试.例如,假设我编写了一些满足某些业务需求的代码...但是,以后,绩效需求改变,我需要优化.如果我第一次写合同,那么 - 当
4 2024-01-07
编程技术问答社区
微软代码合约框架的成熟度如何?
Microsoft最近发布了他们的代码合同具有商业许可证的DevLabs.我们有兴趣在我们的项目(主要是C#,一些C ++/CLI)中使用它们来逐渐替换所有自定义验证代码,但是我很想知道其他人在我们承诺之前的经验,具体: 您认为该框架对于大型且复杂的商业项目已经足够成熟吗? 使用时遇到了哪些问题? 您从中获得了什么好处? 目前的痛苦比它值得吗? 我意识到这是一个主观的问题,因为它需要意见,但是鉴于该框架是.NET 4.0的重要组成部分,并且(可能)将(潜在地)改变我们都编写验证代码的方式,所以我希望这个问题将开放以收集有关该主题的经验,以帮助我做出一个特定,回答的问题: 我们应该下个月开始使用它吗? 请注意,我们不运送代码API,只有Web服务,因此对于大多数代码而言,就抛出的异常类型而言,兼容兼容性并不关心.但是,由于我希望更多的人不仅仅是我从这篇文章中受益及其答案,因此在此领域周围的任何细节都非常欢迎. 解决方案 我一直在玩《代码》在
0 2024-01-07
编程技术问答社区
你如何配置Pex以尊重代码契约?
给定以下示例代码,我如何配置PEX以尊重我的代码合同? public static IEnumerable Administrators(this UserGroup userGroup) { Contract.Requires(userGroup != null); Contract.Requires(userGroup.UserList != null); return userGroup.UserList.Where(ul => ul.IsAdmin == true); } 当前问题:当我运行PEX时,它仍在生成违反指定代码合同的测试用例. fyi: 编辑:做了一些 解决方案 首先,您需要使用"需求"的键入版本 使用参数Nullexception作为T 在您的项目属性中,您还需要告诉代码cotracts使用标准重写器.请勿单击失败的断言;) Contract.
4 2024-01-07
编程技术问答社区
.net 4.0代码合约。什么时候使用?什么时候是浪费时间?
我一直在研究.NET 4.0代码合同,并在stackoverflow上查看有关此的问题. 我从未遇到过使用代码合同的任何示例代码,所以这让我想知道..这真的有用吗?还是您的代码达到一定的复杂性,它唯一有用的?有人使用代码合同,真的很高兴他们做到了吗? 在我看来,所有代码合同都是关于进出方法的主张,以及添加了能够在编译时进出的值的方法...但是这将需要您所有方法上的更多代码..值得吗? 我注意到的一个好处是,在我看来,您可以将代码合同用作单位测试的第一行...然后,当您编写单元测试以避免编写一些更基本的测试时,因为代码合同涵盖了已经..真的吗? 合同可以与WCF电话一起使用吗?我猜没有,因为自动与您无法更改代理. 解决方案 我随时需要验证输入参数需要具有特定值(数字为正,对象不是null). 对于输出,我肯定我可以使用它们来确定返回值应处于某个状态(例如,不为null). 在代码中签订合同可确保在意外价值提高时,并且在代码中不进一步抛弃,因为意外
10 2024-01-07
编程技术问答社区
C#: 代码合约与普通参数验证
考虑以下两种代码: public static Time Parse(string value) { string regXExpres = "^([0-9]|[0-1][0-9]|2[0-3]):([0-9]|[0-5][0-9])$|^24:(0|00)$"; Contract.Requires(value != null); Contract.Requires(new Regex(regXExpres).IsMatch(value)); string[] tokens = value.Split(':'); int hour = Convert.ToInt32(tokens[0], CultureInfo.InvariantCulture); int minute = Convert.ToInt32(tokens[1], CultureInf
2 2024-01-07
编程技术问答社区
.NET 4.0代码合约-它们将如何影响单元测试?
例如,此有什么好处? 静态分析似乎很酷,但与此同时,它将阻止将NULL作为单位测试中的参数传递的能力. (如果您遵循文章中的示例) 在单位测试主题时 - 鉴于您现在已经练习自动测试的情况肯定是什么肯定没有意义的? 更新 玩了代码合同后,我有些失望.例如,基于接受的答案中的代码: public double CalculateTotal(Order order) { Contract.Requires(order != null); Contract.Ensures(Contract.Result() >= 0); return 2.0; } 对于单位测试,您仍然必须编写测试以确保无法通过,并且如果合同为业务逻辑.换句话说,如果我要删除第一份合同,除非我专门对此功能进行了测试,否则不会打破测试.这是基于不使用内置在Visual Studio更好(终极等)版本中的静态分析的. 本质上,它们都归结为替代传统if语句
2 2024-01-07
编程技术问答社区
代码合同。我们是否必须在委托方法中多余地指定Contract.Requires(...)语句?
我打算使用新的.NET 4 代码合同功能用于未来开发.这让我想知道我们是否必须在方法链中冗余地指定等效Contract.Requires(...)陈述. 我认为代码示例值得一千个单词: public bool CrushGodzilla(string weapon, int velocity) { Contract.Requires(weapon != null); // long code return false; } public bool CrushGodzilla(string weapon) { Contract.Requires(weapon != null); // specify contract requirement here // as well???
4 2024-01-07
编程技术问答社区
为什么 ccrewrite.exe 在命令行中没有任何作用?
我从Visual Studio 2010内部的代码合同正常工作,但是我无法从命令行中做任何有用的事情.这是一个示例应用程序: using System.Diagnostics.Contracts; public class Dummy { public static void Main(string[] args) { Contract.Requires(args.Length > 0); } } i然后编译代码并在其上运行ccrewrite.exe: > csc /debug+ /D:CONTRACTS_FULL Dummy.cs > ccrewrite /o:RewrittenDummy.exe Dummy.exe elapsed time: 61ms 之后没有RewrittenDummy.exe文件. 我尝试了很多选项,但没有任何区别.我注意到的一些事情: 肯定是加载dummy.exe,因为如果我指定一个不
0 2024-01-07
编程技术问答社区
为什么你不能捕捉代码合同的异常?
system.diagnostics.contracts.contractexception在我的测试项目中无法访问.请注意,此代码完全是我的Shiny New Visual Studio副本,但我想知道我在做什么错. 我正在使用VS的专业版,因此​​我没有静态检查.为了仍然使用代码合同(我喜欢),我认为我的方法可以使用的唯一方法是捕获在运行时抛出的例外,但我没有发现这可能. testMethod [TestMethod, ExpectedException(typeof(System.Diagnostics.Contracts.ContractException))] public void returning_a_value_less_than_one_throws_exception() { var person = new Person(); person.Number(); } 方法 public int Number() {
2 2024-01-07
编程技术问答社区
.NET 3.5的代码合同搞乱了VS10的调试器
我最近迁移了许多手动前提测试和与代码合同的异常投掷.我没有升级到.NET 4,而是一直使用Microsoft.Contracts.dll组件,因此我可以坚持使用.NET 3.5(这是一个由.NET 3.5和.NET 4组件使用的库).我已经在Visual Studio 2010中设置了合同重写者,并且合同工作正常. 但是,由于我已经完成了此切换,因此我注意到调试器在与合同的方法中起作用,尤其是在ContractInvariantMethod的课程中.执行光标似乎并不总是匹配突出显示的行,一些断点未能击中,并且我有一种方法,其中调试器无法告诉本地变量名称,并且会显示CS$1$0000之类的内容.这是在Debug builds中. 在.NET 3.5至VS10中使用Microsoft.Contracts.dll中使用代码合同有已知问题吗? .NET 4? 中的代码合同会出现类似的问题吗? [edit]这个问题导致我在Microsoft Connect上创建一个错误:https
2 2024-01-07
编程技术问答社区