【发布时间】:2015-06-29 08:32:03
【问题描述】:
我想知道为什么需要 Arbitrary 因为自动化属性测试需要属性定义,比如
val prop = forAll(v: T => check that property holds for v)
和值 v 生成器。用户指南说您可以为自定义类型创建自定义生成器(示例为树的生成器)。然而,它并没有解释为什么你还需要任意性。
这是一份手册
implicit lazy val arbBool: Arbitrary[Boolean] = Arbitrary(oneOf(true, false))
要获得对您自己的类型 T 的支持,您需要定义一个隐式 def 或任意类型的 val[T]。使用工厂方法 Arbitrary(...) 创建任意实例。此方法采用一个类型的参数 Gen[T] 并返回 Arbitrary[T] 的一个实例。
它清楚地表明我们需要在 Gen 之上的 Arbitrary。但是,任意的理由并不令人满意
任意生成器是ScalaCheck使用的生成器 生成属性参数的值。
IMO,要使用生成器,您需要导入它们而不是将它们包装成任意的!否则,人们可能会争辩说,我们还需要将任意元素包装到其他东西中以使它们可用(以此类推,无休止地包装包装器)。
您还可以解释arbitrary[Int] 如何将参数类型转换为生成器。很好奇,感觉这些都是相关的问题。
【问题讨论】:
标签: scala random scalacheck