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

标签 c# testing f# fscheck

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

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

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

最佳答案

您应该用属性替换您的测试,而不是尝试生成随机字符串,然后在您的测试中手动使用它们。 FsCheck 不适合将其用作随机生成器,尽管可以强制将其用作随机生成器。像这样的东西:

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

应该生成一个新的随机字符串,长度最多为 10“大多数时间”,也就是说,如果我没记错的话,随机种子是基于时间的。因此,如果您在同一时间间隔内调用它两次,它将返回相同的字符串。

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

关于c# - 使用 C# 使用 FsCheck 生成随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32014166/

相关文章:

c# - 在外国Windows上测试,这可能吗?

.net - 在此 bind() 参数中省略 unit 参数时,我是否应该看到不同之处?

c# - 是否可以创建具有通用事件的类?

c# - 如何以相同的输出为目标同步运行进程?

javascript - 有没有办法在 Node.js 中使用两个回调函数的值( bool 值)?

testing - 开 Jest beforeEach/afterEach 只是这个范围内的 block ?

c# - 如何获取用 C# 挂载的 ISO 的驱动器号

c# - 如何有效地管理对 Membership.GetUser() 的多次调用

f# - 矩阵的内存不足异常

list - F# 将 Array2 转换为列表