我正在使用 kotlin + Kotest 属性测试,并尝试使用如下列表生成器测试 2 个参数的所有排列:
"Some test"{
forAll(4 ,
Exhaustive.collection(listOf(
"a",
"b")),
Exhaustive.collection(listOf(
"1",
"2"))
{ begins_with, contains ->
println("$begins_with:$contains")
... some validation code...
}
我希望使用穷举生成器能够以这样的方式生成它们,即通过 4 次迭代,所有可能的排列都将被覆盖。像这样:
a:1
b:2
a:2
b:1
相反,穷举生成器总是按照列出的顺序排列,如下所示:
a:1
b:2
a:1
b:2
这意味着我要多次测试同一个案例。
我已经尝试将一些生成器切换到 Arbs,这确实会改变顺序,但不是最佳的。为了增加击中所有案例的可能性,我必须比使用正确的顺序进行更多的测试。
我也考虑过像这样多次列出相同的元素
"Some test"{
forAll(4 ,
Exhaustive.collection(listOf(
"a",
"b")),
Exhaustive.collection(listOf(
"1",
"1",
"2",
"2"))
{ begins_with, contains ->
println("$begins_with:$contains")
... some validation code...
}
但这似乎不可持续,尤其是当我以后想添加更多参数或值时。
有没有办法生成详尽的排列,而不仅仅是继续遍历每个列表?