0

ScalaCheck API は、最大 8 つのパラメーターを持つ関数からプロパティを作成するための 8 つの forAll メソッドを定義します。8 つ以上のパラメーターを持つ関数をテストすることはできますか?

4

1 に答える 1

1

これにはさまざまな方法があります。もちろん、独自の forAll9 Implicit を作成することもできますが、独自の Generator を作成することをお勧めします。

たとえば、経度、緯度、高さを受け取る楽しみがあります。

case class Coordinate(longtitude: Int, latitude: Int, height: Int)

このケースクラスをいくつかの楽しみのパラメータにしましょう

teleportToHawaii(coordinate: Coordinate): Coordinate

それでは、ジェネレーターを書きましょう。long/lat が -180/+180 で、height が 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)

これで、3 つではなく 1 つのパラメーターのみを使用して、テレポートの楽しみをテストできます。

forAll (coordsGen) { (coord: Coordinate) =>
  teleportToHawaii(coord) should equal HawaiiCoordinate
}

独自のジェネレーターを作成すると、何かにカプセル化された任意の数の引数を組み込むことができます

では、なぜ 8 つしかないのでしょうか。Tuple22 を書いた人よりも、scalaCheck の人は怠け者だったのだと思います。

于 2014-01-16T17:16:05.390 に答える