如何使用 C# 中的 FsCheck 自定义生成器?

Art*_*dez 4 fscheck

我有以下代码:

var gen = from x in Arb.Generate<int>()
from int y in Gen.Choose(5, 10)
where x > 5
select new tuple { Fst = x, Snd = y };
Run Code Online (Sandbox Code Playgroud)

我可以跑

Prop.ForAll<tuple>(c =>
      Console.WriteLine($"{c.Fst}, {c.Snd}")
).Check(Configuration.Default);
Run Code Online (Sandbox Code Playgroud)

我看到了构造生成器和定义属性的所有方法。

但我只是没有足够快地找到如何一起使用它们。

Edd*_*ter 5

您需要向 FsCheck 注册自定义生成器。请参阅 FSCheck 文档

简而言之,创建一个类来保存您的自定义生成器。有一个公共静态方法返回您正在生成的类型Arbitrary<T>T

在您的示例中,您需要将生成器包装在对Arb.From(...).

public class MyGenerators {
    public static Arbitrary<tuple> Tuple() {
        return Arb.From(from x in Arb.Generate<int>()
                        from int y in Gen.Choose(5, 10)
                        where x > 5
                        select new tuple { Fst = x, Snd = y });
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,Arb.Register<MyGenerators>()在运行测试之前致电。