16

デバッグを容易にするために、specs2テストスイートのScalaCheckプロパティテストを一時的に決定論的にしたいと思います。現在、テストスイートを再実行するたびに異なる値が生成される可能性があります。これは、観察された動作の変化がコードの変更によるものなのか、生成された異なるデータによるものなのかわからないため、デバッグを苛立たせます。

これどうやってするの?ScalaCheckで使用されるランダムシードを設定する公式の方法はありますか?

sbtテストスイートの実行に使用しています。

ボーナスの質問: ScalaCheckで使用されるランダムシードを印刷して、非決定論的なテスト実行でも再現できるようにする公式の方法はありますか?

4

4 に答える 4

11

純粋な ScalaCheck プロパティを使用している場合、Test.Paramsクラスを 使用して、java.util.Random使用されるインスタンスを変更し、常に同じ値のセットを返す独自のインスタンスを提供できるはずです。

def check(params: Test.Parameters, p: Prop): Test.Result

[更新しました]

次の構文を使用して乱数発生器を指定できる新しい specs2-1.12.2-SNAPSHOT を公開しました。

case class MyRandomGenerator() extends java.util.Random {
  // implement a deterministic generator 
}

"this is a specific property" ! prop { (a: Int, b: Int) =>
  (a + b) must_== (b + a)
}.set(MyRandomGenerator(), minTestsOk -> 200, workers -> 3)
于 2012-09-28T14:38:04.630 に答える