Compatibility with Parameterize
Concise DSL for parameterized tests, using Parameterize.
Prepared allows to easily declare multiple variants of the same test, however, nesting is necessary:
suite("A test suite") {
val middle = "substring"
for (prefix in listOf("", "prefix-")) {
for (suffix in listOf("", "-suffix")) {
val string = "$prefix$middle$suffix"
test("$string contains $middle") {
assertContains(middle, string)
}
}
}
}
Content copied to clipboard
Using Parameterize removes the nesting:
suite("A test suite") {
parameterize {
val middle = "substring"
val prefix by parameterOf("", "prefix-")
val suffix by parameterOf("", "-suffix")
val string = "$prefix$middle$suffix"
test("$string contains $middle") {
assertContains(middle, string)
}
}
}
Content copied to clipboard
Prepared values
Prepared values allow declaring lazily-computed test fixtures. Using this module, they can be used as test parameters as well. Depending on the situation, two syntaxes are available.
When prepared values are heterogeneous, declare them then combine them as parameters:
suite("A test suite") {
parameterize {
val one by prepared { 1 }
val other by prepared { random.nextInt() }
val number by parameterOf(one, other)
test("Test $number") {
assertTrue(number().toString().isNotEmpty())
}
}
}
Content copied to clipboard
When they are constructed by transforming another parameter, declare the parameter first:
suite("A test suite") {
parameterize {
val number by parameterOf(0, 1, Int.MAX_VALUE, -99)
.prepare { expensiveOperation(it) }
test("Test $number") {
assertTrue(number().successful)
}
}
}
Content copied to clipboard