ScalaCheck api定义了8种forAll方法,用于从最多8个参数的函数创建属性。是否可以测试具有8个以上参数的函数?
答案 0 :(得分:1)
这可以通过多种方式完成。当然你可以尝试编写自己的forAll9隐式,但我建议你创建自己的Generator
例如,我们有一种乐趣,它可以获得经度,纬度和高度,让它像是
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的人更懒。