2017-12-14 15 views
2

は、私は次のコードを持っている:C#の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 }; 

をそして私は、私は発電機を構築し、プロパティを定義するためにすべての方法を参照してください

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

実行することができます。

しかし、私はそれらを一緒に使う方法をすぐに見つけられません。

答えて

1

FsCheckでカスタム発電機を登録する必要があります。 FSCheck docsを参照してください。

つまり、カスタムジェネレータを維持するためのクラスを作成します。公開静的メソッドを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 }); 
    } 
} 

最後に、テストを実行する前にArb.Register<MyGenerators>()に電話してください。

関連する問題