2

我刚刚开始使用 FsCheck。我需要生成一些测试数据,这里TestData代表我测试的输入:

type Interval = { Start : DateTime; End : DateTime }
type Frob = { Interval : Interval; MustFrob : bool }

type TestData = { Intervals: Interval[]; Frob : Frob option }

我的生成代码如下所示:

let generator = gen {
    let! startTime = Arb.Default.DateTime().Generator
    return! Gen.sized(fun size -> gen {
         let intervalDurations = Gen.listOfLength size myOwnSuperDurationGenerator
         let intervals = 
              // blabla using startTime and intervalDurations

         let! maybeFrob = Arb.Default.Option<Frob>().Generator
         let adjustedFrob = maybeFrob |> Option.map(fun f ->
              { f with Interval = // mess with the interval }
         return { Intervals = intervals; Frob = adjustedFrob }         
    }
}

所以,这行得通,但我不喜欢调用,Arb.Default.Blabla().Generator因为我无法将 size 参数传递给它们,所以我的测试没有利用那里的缩小。例如缩小Frob optiontoNone或选择更简单的startTime. 在生成这样的单个值时,有没有办法传播该大小参数?- 也感谢您指出任何严重的初学者错误,我真的只是想弄清楚如何使用这个 API。

4

0 回答 0