如何利用复杂案例中的收缩

时间:2016-08-15 22:37:19

标签: f# fscheck

我刚刚开始使用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,因为我无法传递它们的大小参数,所以我的测试没有利用那里的缩小。例如,将Frob option缩小为None,或选择更简单的startTime。有没有办法在生成像这样的单个值时传播该大小参数? - 还要感谢指出任何令人发指的初学者错误,我真的只想弄清楚如何使用这个API。

0 个答案:

没有答案