在ScalaCheck中,一个映射/平面映射的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的情况下重写它来工作?
发布于 2016-07-02 18:41:52
将suchThat替换为retryUntil,但要注意无限循环。
https://stackoverflow.com/questions/38152825
复制相似问题