测试具有8个以上参数的函数

时间:2014-01-16 15:41:13

标签: scala scalacheck

ScalaCheck api定义了8种forAll方法,用于从最多8个参数的函数创建属性。是否可以测试具有8个以上参数的函数?

1 个答案:

答案 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的人更懒。