ScalaCheck api 定义了 8 个 forAll 方法,用于从具有多达 8 个参数的函数创建属性。是否可以测试具有超过 8 个参数的函数?
问问题
118 次
1 回答
1
这可以通过多种方式完成。当然你可以尝试编写自己的 forAll9 隐式,但我建议你创建自己的 Generator
例如,我们有一个 fun,它接收经度、纬度和高度,让它像
case class Coordinate(longtitude: Int, latitude: Int, height: Int)
让这个案例类成为一些有趣的参数
teleportToHawaii(coordinate: Coordinate): Coordinate
现在让我们为它编写生成器。让我们假设 long/lat 可以是 -180/+180 和高度从 0 到 8000。我对 ScalaCheck 不太熟悉,但我想它应该是这样的
import org.scalacheck.Gen
val coordsGen = for {
long <- Gen.choose(-180, 180)
lat <- Gen.choose(-180, 180)
height <- Gen.choose(0, 8000)
} yield Coordinate(long, lat, height)
所以现在,我们可以使用一个参数而不是三个参数来测试我们的传送乐趣:
forAll (coordsGen) { (coord: Coordinate) =>
teleportToHawaii(coord) should equal HawaiiCoordinate
}
编写自己的生成器,您可以将任意数量的参数封装在某些东西中
那为什么只有8个?我猜来自 scalaCheck 的人只是比那些写 Tuple22 的人更懒惰
于 2014-01-16T17:16:05.390 回答