在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
?
答案 0 :(得分:0)
将suchThat
替换为retryUntil
,但要注意无限循环。