ScalaCheck嵌套Gen

时间:2016-07-01 19:34:46

标签: scalatest scalacheck

在ScalaCheck中,如果任何内部gen都有过滤掉的值,那么map / flatMapped Gen似乎会失败。例如。 (使用ScalaTest)

class ScalaCheckGen extends FreeSpec with GeneratorDrivenPropertyChecks {
  "Fails" in {
    forAll(Gen.listOfN(100, arbitrary[Int].suchThat(_ % 2 == 0))){
      _ => assert(true)}

    //Gave up after 0 successful property evaluations. 51 evaluations were discarded.
  }

  "Passes" in {
    forAll(Gen.listOfN(100, arbitrary[Int].map(_ * 2))){
      _ => assert(true)}
  }
}

假设上面的简单解决方法不起作用,因为suchThat条件很复杂。如何在仍然使用suchThat

的情况下将其重写为可行的

1 个答案:

答案 0 :(得分:0)

suchThat替换为retryUntil,但要注意无限循环。