使用c#使用FsCheck生成随机字符串

本文关键字:使用 随机 字符串 FsCheck | 更新日期: 2023-09-27 18:07:54

我想逐步将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;
}

如果我多次调用它,每次都得到相同的字符串。

我怎么能得到一个不同的字符串每次和/或正确地编写这段代码?

使用c#使用FsCheck生成随机字符串

您应该用属性替换您的测试,而不是尝试生成随机字符串,然后在测试中手动使用这些字符串。FsCheck并不打算将其用作随机生成器,尽管有可能强制它这样做。比如:

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

应该生成一个新的长度为10的随机字符串"大多数时间",即,如果我没记错的话,随机种子是基于时间的。如果你在相同的时间间隔内调用它两次它会返回相同的字符串

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