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 的新随机字符串,即如果我没记错的话,随机种子是基于时间的。因此,如果您在相同的时间间隔内调用它两次,它将返回相同的字符串。

这样做不会让您利用收缩和 APIProp来观察和分类生成的数据,例如限制它:https ://fscheck.github.io/FsCheck/Properties.html

于 2015-08-15T08:49:01.897 回答