【问题标题】:Testing a list of types with FsCheck使用 FsCheck 测试类型列表
【发布时间】:2013-12-12 12:49:58
【问题描述】:

我有一个属性可以测试一个类型可以成功地往返 JSON 并返回。

let roundTrip<'a when 'a : equality> (x: 'a) = (toJSON >> ofJSON) x = x

我目前通过调用运行

Check.Quick roundTrip<TypeName>

我希望能够在我通过反射获得的类型列表上运行此属性(扫描我的程序集以查找我知道需要 JSON 可序列化的类型)

是否可以在运行时为列表中的类型运行此属性,而不是需要在我的测试中全部指定它们?

【问题讨论】:

    标签: f# fscheck


    【解决方案1】:

    假设您的所有类型都具有为它们定义的自定义生成器,或者可以由内置生成器派生,您真正需要做的就是为要测试的每种类型实例化往返方法的 MethodInfo。然后是为每种类型调用的重载 Check.Method。这将运行标准 FsCheck 测试,就像您在编译时使用该类型调用方法一样。

    类似:(抱歉,未编译,但应该关闭)

    type Marker = class end
    let roundtrip<'a> = //as above
    let checkForTypes (ts:seq<Type>) =
        let roundtripInfo = typeof<Marker>.DeclaringType.GetMethod("roundtrip")
        ts 
        |> Seq.map (fun t -> roundtripInfo.MakeGenericMethod([|t|])) 
        |> Seq.iter (fun m -> Check.Method(Config.Quick, m))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多