正确使用scalacheck生成器
我在正确使用scalacheck生成器方面遇到了一些困难。我想测试某个范围内具有整数参数的任意数组-代码主要如下所示:正确使用scalacheck生成器,scala,scalacheck,Scala,Scalacheck,我在正确使用scalacheck生成器方面遇到了一些困难。我想测试某个范围内具有整数参数的任意数组-代码主要如下所示: import org.scalacheck._ object BlockSpecs extends Properties("Block") { val arrayGen = Gen.containerOf[Array, Byte](0.toByte) val intGen = Gen.choose(1, 255) property("addPadding")
import org.scalacheck._
object BlockSpecs extends Properties("Block") {
val arrayGen = Gen.containerOf[Array, Byte](0.toByte)
val intGen = Gen.choose(1, 255)
property("addPadding") = Prop.forAll(arrayGen, intGen) { (a, b) =>
val padded = addPadding(a, b)
(a.length != padded.length) &&
(padded.length % b == 0)
}
}
Prop.forAll { (a: Array[Byte], b: Int) => ... }
但是,我得到的整数值包含0。当我将Prop.forAll
更改为Prop.forAllNoShrink
时,它会因某种我不清楚的原因而起作用
基本上,我只想做以下几点:
import org.scalacheck._
object BlockSpecs extends Properties("Block") {
val arrayGen = Gen.containerOf[Array, Byte](0.toByte)
val intGen = Gen.choose(1, 255)
property("addPadding") = Prop.forAll(arrayGen, intGen) { (a, b) =>
val padded = addPadding(a, b)
(a.length != padded.length) &&
(padded.length % b == 0)
}
}
Prop.forAll { (a: Array[Byte], b: Int) => ... }
但在给定的范围内使用
b
。最简单的方法是什么?您是说intGen
生成0
?听起来很奇怪。如果你只是做一些简单的事情,比如Gen.listOfN(10000,intGen).sample
你会得到一个包含0
的列表吗?啊,看来生成器毕竟工作正常,只有在出现故障时,scalacheck才会尝试“缩小”故障,以获得“最小”失败测试用例,在该阶段,它不再使用发电机: