使用shapeless-scalacheck派生任意函数实例
在升级到
scalacheck 1.13.3之后,我遇到了一个奇怪的问题,即导出A =>的实例. B或C,其中Or本质上是一个光,或者几乎总是失败.
这是我可以编写的最简单的代码来重现该问题: import org.scalatest.FunSuite import org.scalatest.prop.GeneratorDrivenPropertyChecks import org.scalacheck.Shapeless._ class Testor extends FunSuite with GeneratorDrivenPropertyChecks { sealed trait Or[+A,+B] extends Product with Serializable case class Left[A](a: A) extends Or[A,Nothing] case class Right[B](b: B) extends Or[Nothing,B] test("reproduce") { forAll { (i: Int,f: Int ? Float Or Boolean) ? f(i) } } } 这失败了: RetrievalError was thrown during property evaluation. Message: couldn't generate value Occurred when passed generated values ( arg0 = 0,// 30 shrinks arg1 = <function1> ) 请注意,提供明确的Arbitrary [Float或Boolean]可以解决问题,因此很明显问题出现在泛型推导中. 我不相信问题在于无形scalacheck – 我尝试编写自己的泛型推导来看看它是否有帮助,并且它以完全相同的方式失败了. 奇怪的东西,但可能是由于任意函数的工作方式,是函数实际生成,但在评估时失败. 非常感谢任何帮助/建议,因为我有点卡住了. 解决方法
这个问题似乎是双面的:
> scalacheck(org.scalacheck.Test.Parameters.default)和scalatest中的默认测试参数的minSize为0.Prop.check尝试在启动时生成具有此大小的值. 作为临时解决方法,在Travis的回复示例中,可以通过以下方式检查属性: prop.check(Test.Parameters.default.withMinSize(1)) 使用scalatest(在问题中使用),min size参数也可以改变,可能通过放置类似的东西 implicit val config = PropertyCheckConfiguration(minSize = PosZInt(1)) 在测试用例之前(警告:我没有尝试/检查最新的解决方案,不像之前的纯scalacheck). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |