C#中的FsCheck:生成具有相同形状的二维数组列表假设我正在编写一些视频分析代码。这是Video类的简化版本:publicclassVideo{publicreadonlyintWidth;公共只读int高度;公共只读列表框架;publicVideo(intwidth,intheight,IEnumerableframes){Width=width;身高=身高;框架=新列表();foreach(varframeinframes){if(frame.GetLength(0)!=height||frame.GetLength(1)!=width){thrownewArgumentException("Incorrectframesdimensions");}框架.Add(框架);}}}如何制作Arbitrary并注册它?如何为这种任意性制作收缩机?试过这个,无法理解应用是如何工作的:publicstaticArbitraryVideos(){varvideoGen=Arb.Generate().SelectMany(w=>Arb.Generate(),(w,h)=>new{w,h}).Apply(/*什么是Gen*/);返回videoGen.ToArbitrary();}试过这个,但不能在此处插入生成器列表:w,h,/*如何在这里插入生成器?*/));返回videoGen.ToArbitrary();}以KurtSchelfthout的回答为基础,您可以像这样为视频类编写一个任意对象:publicstaticclassVideoArbitrary{publicstaticArbitraryVideos(){vargenVideo=fromwinArb.Generate()fromhinArb.Generate()fromarrsinGen.ListOf(Gen.Array2DOf(h.Item,w.Item,Arb.Generate()))选择新视频(w.Item,h.Item,arrs);返回genVideo.ToArbitrary();您可以通过多种方式使用它PlainvanillaFsCheck以下是如何使用简单的vanillaFsCheck将视频转换为任意视频,托管在xUnit.net测试用例中,这不是必需的:您可以在任何您喜欢的过程中托管它:[Fact]publicvoidVideoProperty(){varproperty=Prop.ForAll(VideoArbitrary.Videos(),video=>{//测试在这里...Assert.NotNull(video);});property.QuickCheckThrowOnFailure();Prop.ForAll对于使用自定义Arbitraries定义属性很有用。当您调用QuickCheckThrowOnFailure时,它??将对Video类的“全部”(通过失败:100)值运行测试。无法键入xUnit.net属性您也可以使用FsCheck.XunitGlue库,但必须将Arbitrary作为弱类型值传递给属性:[Property(Arbitrary=new[]{typeof(VideoArbitrary)})]publicvoidXunitPropertyWithWeaklyTypedArbitrary(Videovideo){//测试在这里...Assert.NotNull(video);这是简单易懂的,但是在分配Arbitrary属性时不涉及静态类型检查,所以我不太喜欢这种方法。类型化xUnit.net属性将FsCheck.Xunit与自定义Arbitraries结合使用的更好方法是将其与Prop.ForAll结合使用:[Property]publicPropertyXUnitPropertyWithStronglyTypedArbitrary(){returnProp.ForAll(VideoArbitrary.Videos(),video=>{//测试在这里...Assert.NotNull(video);});注意这个方法的返回类型不再是void,而是Property;[Property]属性理解此类型并相应地进行测试。第三个选项是我在xUnit.net中使用自定义Arbitraries的首选方法,因为它带回了编译时检查。只是一个草图-没有编译:)以上是C#学习教程:FsCheckinC#:Generatingalistof2Darrayswithsameshape。教程,希望大家多多关注——vargenVideo=fromwinArb.Generate()fromhinArb.Generate()fromarrsinGen.ListOf(Gen.Array2DOf(h,w,Arb.Generate))选择新视频(w、h、arrs);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: