【问题标题】:FsCheck test change the range of values used for testingFsCheck 测试更改用于测试的值的范围
【发布时间】:2014-11-15 19:01:04
【问题描述】:

我的代码在使用 FsCheck 时自动测试从 -99 到 99 的值。

Check.Quick test

我的测试函数采用整数值。

我想使用 1 到 4999 之间的值进行测试。

【问题讨论】:

  • 我猜你可以创建自己的生成器来完成它:fsharp.github.io/FsCheck/TestData.html
  • 感谢您的链接 :-) 已修复!
  • 您应该删除您的问题或将其展开,以便我们可以使其对未来的用户有用

标签: f# fscheck


【解决方案1】:

您可以将Gen.elementsProp.forAll 结合使用:

let n = Gen.elements [-99..99] |> Arb.fromGen
let prop = Prop.forAll n (fun number -> 
    // Test goes here - e.g.:
    Assert.InRange(number, -99, 99))
prop.QuickCheck()

Gen.elements 采用一系列有效值并根据该序列创建一个统一的生成器。 Prop.forAll 使用该自定义生成器定义一个属性。

你可以combine it with FsCheck's Glue Library for xUnit.net,这是我的首选方法:

[<Property>]
let ``Number is between -99 and 99`` () =
    let n = Gen.elements [-99..99] |> Arb.fromGen
    Prop.forAll n (fun number -> 
        // Test goes here - e.g.:
        Assert.InRange(number, -99, 99))

【讨论】:

  • 还可以考虑在这里使用Gen.choose - 会更有效(不分配整数列表)。但Gen.elements 更直接地推广到其他类型。
【解决方案2】:

默认情况下,FsCheck 生成 1 到 100 之间的整数。您可以通过向 Check 提供 Config 对象来更改此设置。

let config = {
  Config.Quick with 
    EndSize = 4999
}
Check.One(config,test)

EndSize 表示当所有测试都通过时,用于最后一个测试的大小。大小在 StartSize 和 EndSize 之间线性增加,如果您希望生成从 1 以外的某个值开始的范围内的测试数据,您也可以设置它。参见https://github.com/fscheck/FsCheck/blob/master/src/FsCheck/Runner.fstype Config的实现

【讨论】:

  • 这有点误导。大小是一个正整数,它限制了正在生成的类型的大小——但每种类型对大小的含义都有自己的解释。对于int i,它意味着abs(i) &lt;= size。对于列表,它表示生成列表的最大长度。等等。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多