首先,当我运行它,我得到不同的行为给你。一个例子,从我的测试项目结果:
Result Message: FsCheck.Xunit.PropertyFailedException : Falsifiable, after 4 tests (0 shrinks) (StdGen (196938613,296107830)): Original: B
这是有道理的,因为fscheck应该能够自动创建用于通过反射可区分联合类型(如ABC
)发电机,请参阅:https://fscheck.github.io/FsCheck/TestData.html
我会因此建议检查您的所有软件包是否已正确安装并完全更新。
我安装:
- FsCheck(V2.2.4)
- FsCheck.Xunit(V2.2.4)
- 的xUnit(V2.1.0)
FSharp.Core
始终安装哪个引用FSharp.Core因为他们AR的NuGet包时要小心e经常分发一个覆盖项目设置的特定版本。
如果发生这种情况,请从packages.config文件中删除FSharp.Core,删除项目中对FSharp.Core的引用,并将其替换为程序集列表中所需的FSharp.Core版本。您可以在扩展名下找到FSharp.Core。
您也可以使用您的app.config文件重定向绑定重定向到旧的版本FSharp.Core到指定的较新版本的引用。
在.fsproj使用<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
可以自动生成这样绑定重定向。有关使用的更多详细信息,请参阅https://fsharp.github.io/2015/04/18/fsharp-core-notes.html。
发电机
你有错误消息指能力fscheck在那里你可以指定你的类型的任意实例进行性能测试的目的而创建。自定义生成器的例子:
type MyGenerators =
static member ABC() =
{new Arbitrary<ABC>() with
override x.Generator = gen { return A; } // generator that creates only A
override x.Shrinker t = Seq.empty }
然后我就可以用这个发电机来检查我的财产:
[<Property(Arbitrary=[|typeof<MyGenerators>|])>]
static member ``ABC is always A`` v =
v = A
该测试现在总是通过,因为我一直指定的发电机产生的A
。
App.config中的绑定重定向正是我所需要的。请注意,您可以将其推广到'''' –