小编jan*_*edn的帖子

是否有更简单的方法来使用 Kotest 基于属性的测试来测试所有排列?

我正在使用 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...
        }
Run Code Online (Sandbox Code Playgroud)

我希望使用穷举生成器能够以这样的方式生成它们:通过 4 次迭代,所有可能的排列都将被覆盖。像这样:

a:1
b:2
a:2
b:1
Run Code Online (Sandbox Code Playgroud)

相反,详尽的生成器总是按照列出的顺序排列,如下所示:

a:1
b:2
a:1
b:2
Run Code Online (Sandbox Code Playgroud)

这意味着我正在多次测试同一个案例。

我尝试过将一些生成器切换到 Arb,这确实会切换顺序,但不是最佳状态。为了增加命中所有情况的可能性,我必须进行比使用正确顺序时更多的测试。

我也考虑过像这样多次列出相同的元素

"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...
        }
Run Code Online (Sandbox Code Playgroud)

但这似乎不可持续,尤其是当我想稍后添加更多参数或值时。

有没有办法生成详尽的排列,而不是继续循环每个列表?

kotlin property-based-testing kotlintest kotest

4
推荐指数
1
解决办法
1463
查看次数