Scalacheck OutOfMemory异常
当然,我一定忽略了一些事情,但这里发生了什么Scalacheck OutOfMemory异常,scala,scalatest,Scala,Scalatest,当然,我一定忽略了一些事情,但这里发生了什么 object MenuTreeArbitrary extends Properties("MenuTree") { lazy val genMenuDetails: Gen[MenuDetails] = for { id <- arbitrary[Int] label <- arbitrary[String] itemType <- arbitrary[String]
object MenuTreeArbitrary extends Properties("MenuTree") {
lazy val genMenuDetails: Gen[MenuDetails] = for {
id <- arbitrary[Int]
label <- arbitrary[String]
itemType <- arbitrary[String]
formId <- arbitrary[Int]
ms <- arbitrary[String]
mv<- arbitrary[JsValue]
items <- Gen.lzy(genMenuDetails)
} yield MenuDetails(Some(id), label, itemType, Some(formId), Some(Map(ms->mv)), Some(List(items)))
implicit lazy val menuDetailsArb: Arbitrary[MenuDetails] = Arbitrary(genMenuDetails)
lazy val genMenuTree: Gen[MenuTree] = for {
id <- arbitrary[Int]
rootOrgId <- arbitrary[Int]
isForMobile <- arbitrary[Boolean]
otherJson <- Gen.lzy(arbitrary[MenuDetails])
} yield MenuTree(id, Some(rootOrgId), isForMobile, otherJson)
}
}
在执行forAll(genMenuTree)时,尽管代码使用的是Gen.lzy,但它在递归调用时抛出OfMemory。有什么想法吗
rg.scalatest.exceptions.GeneratorDrivenPropertyCheckFailedException: Exception "java.lang.StackOverflowError" (included as the TestFailedException's cause) was thrown during argument generation.
at org.scalatest.prop.Checkers$.doCheck(Checkers.scala:453)
at org.scalatest.prop.GeneratorDrivenPropertyChecks$class.forAll(GeneratorDrivenPropertyChecks.scala:915)
rg.scalatest.exceptions.GeneratorDrivenPropertyCheckFailedException: Exception "java.lang.StackOverflowError" (included as the TestFailedException's cause) was thrown during argument generation.
at org.scalatest.prop.Checkers$.doCheck(Checkers.scala:453)
at org.scalatest.prop.GeneratorDrivenPropertyChecks$class.forAll(GeneratorDrivenPropertyChecks.scala:915)