0

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

4

1 回答 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 回答