Configure property-based test execution with comprehensive parameter control including test counts, generator sizes, random seeds, verbosity levels, and parallel execution. The configuration system supports both programmatic setup and command-line parameter overrides for flexible test environments.
Configure test execution parameters with builder methods for both quiet and verbose test runs.
trait ScalaCheckParameters {
implicit def defaultParameters: Parameters
implicit def defaultFreqMapPretty: FreqMap[Set[Any]] => Pretty
def set(
minTestsOk: Int = defaultParameters.minTestsOk,
minSize: Int = defaultParameters.minSize,
maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
maxSize: Int = defaultParameters.maxSize,
workers: Int = defaultParameters.workers,
callback: Test.TestCallback = defaultParameters.testCallback,
loader: Option[ClassLoader] = defaultParameters.loader
): Parameters
def display(
minTestsOk: Int = defaultParameters.minTestsOk,
minSize: Int = defaultParameters.minSize,
maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
maxSize: Int = defaultParameters.maxSize,
workers: Int = defaultParameters.workers,
callback: Test.TestCallback = defaultParameters.testCallback,
loader: Option[ClassLoader] = defaultParameters.loader
): Parameters
}Usage:
import org.specs2._
import org.specs2.ScalaCheck
class ConfiguredSpec extends Specification with ScalaCheck { def is = s2"""
High volume testing ${
prop((xs: List[Int]) => xs.reverse.reverse == xs)
.set(minTestsOk = 1000, maxSize = 200)
}
Verbose testing ${
prop((s: String) => s.length >= 0)
.display(minTestsOk = 50)
}
"""
}Encapsulate all ScalaCheck and specs2-specific test parameters with conversion and override capabilities.
case class Parameters(
minTestsOk: Int = Test.Parameters.default.minSuccessfulTests,
minSize: Int = Test.Parameters.default.minSize,
maxDiscardRatio: Float = Test.Parameters.default.maxDiscardRatio,
maxSize: Int = Test.Parameters.default.maxSize,
workers: Int = Test.Parameters.default.workers,
testCallback: Test.TestCallback = Test.Parameters.default.testCallback,
loader: Option[ClassLoader] = Test.Parameters.default.customClassLoader,
prettyParams: Pretty.Params = Pretty.defaultParams,
seed: Option[Seed] = None
) {
def verbose: Parameters
def setVerbosity(v: Int): Parameters
def testParameters: Test.Parameters
def overrideWith(commandLine: CommandLine): Parameters
}Usage:
// Custom parameters instance
implicit val customParams = Parameters(
minTestsOk = 500,
maxSize = 100,
workers = 4,
seed = Some(Seed.fromBase64("custom-seed").get)
).verbose
class ParameterizedSpec extends Specification with ScalaCheck { def is = s2"""
Parameterized property ${prop((n: Int) => n * n >= 0)}
"""
}Control random seed generation for reproducible test runs and debugging failed properties.
object Parameters {
def makeSeed(seed: String): Option[Seed]
}
// In ScalaCheckProperty
trait ScalaCheckProperty {
def setSeed(seed: Seed): SelfType
def setSeed(seed: String): SelfType
}Usage:
class ReproducibleSpec extends Specification with ScalaCheck { def is = s2"""
Reproducible property ${
prop((data: List[String]) => processData(data).size <= data.size)
.setSeed("AbCdEf1234567890") // Base64 encoded seed
}
Debug failing property ${
prop((x: Double) => x + 0.0 == x)
.setSeed(Seed.fromBase64("failing-test-seed").get)
.verbose
}
"""
}Control test output verbosity for debugging and monitoring test execution.
trait ScalaCheckProperty {
def setVerbosity(v: Int): SelfType
def verbose: SelfType
}
case class Parameters(...) {
def verbose: Parameters
def setVerbosity(v: Int): Parameters
}Usage:
class VerboseSpec extends Specification with ScalaCheck { def is = s2"""
Debug property ${
prop((input: ComplexData) => validateComplexData(input))
.verbose
.set(minTestsOk = 10) // Fewer tests but verbose output
}
Custom verbosity ${
prop((xs: List[Int]) => xs.sorted.head <= xs.sorted.last)
.setVerbosity(2) // Higher verbosity level
}
"""
}Override parameters from command line arguments for flexible test execution in different environments.
case class Parameters(...) {
def overrideWith(commandLine: CommandLine): Parameters
}Command line options:
scalacheck.mintestsok=N - Minimum successful testsscalacheck.minsize=N - Minimum generator sizescalacheck.maxdiscardratio=F - Maximum discard ratioscalacheck.maxsize=N - Maximum generator sizescalacheck.workers=N - Number of worker threadsscalacheck.seed=BASE64 - Random seed (Base64 encoded)scalacheck.verbosity=N - Verbosity levelscalacheck.verbose=true - Enable verbose mode// Parameter configuration trait
trait ScalaCheckParameters {
implicit def defaultParameters: Parameters
implicit def defaultFreqMapPretty: FreqMap[Set[Any]] => Pretty
def set(...): Parameters
def display(...): Parameters
}
// Parameters case class
case class Parameters(
minTestsOk: Int,
minSize: Int,
maxDiscardRatio: Float,
maxSize: Int,
workers: Int,
testCallback: Test.TestCallback,
loader: Option[ClassLoader],
prettyParams: Pretty.Params,
seed: Option[Seed]
) {
def verbose: Parameters
def setVerbosity(v: Int): Parameters
def testParameters: Test.Parameters
def overrideWith(commandLine: CommandLine): Parameters
}
// Parameters companion
object Parameters {
def makeSeed(seed: String): Option[Seed]
}