5

FsCheck を C# テスト コードに (最初のステップとして) 徐々に統合したいと考えています。

入力データの一部をランダムに生成したいと思います。

これは、ランダムな文字列を生成する方法です。


static string RandomString() {
  var kgen = Gen.Constant(Gen.Sized(g => Gen.OneOf(Arb.Generate())));
  var sgen = Gen.Sample(1, 10, kgen).First();
  var str = Gen.Eval(10, Random.StdGen.NewStdGen(0, 1000), sgen);
  return str;
}

複数回呼び出すと、毎回同じ文字列を取得します。

毎回異なる文字列を取得したり、このコードを正しく記述したりするにはどうすればよいですか?

4

1 に答える 1

8

ランダムな文字列を生成してテストで手動で使用するのではなく、テストをプロパティに置き換える必要があります。FsCheck は、乱数発生器として使用することを目的としていませんが、強制的に使用することは可能です。何かのようなもの:

var maxLength = 10
return Arb.Generate<string>().Sample(maxLength, 1).Single()

「ほとんどの場合」、最大 10 の長さの新しいランダム文字列を生成する必要があります。つまり、正しく覚えていれば、ランダムシードは時間ベースです。したがって、同じ間隔で 2 回呼び出すと、同じ文字列が返されます。

このようにすると、Propたとえば、生成されたデータを観察および分類したり、制限したりするために、縮小や API を利用できなくなります: https://fscheck.github.io/FsCheck/Properties.html

于 2015-08-15T08:49:01.897 に答える