Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle Kotlintest中的数据表测试-高级方法名称和测试用例的扩展_Gradle_Kotlin_Kotlintest_Parameterized Tests - Fatal编程技术网

Gradle Kotlintest中的数据表测试-高级方法名称和测试用例的扩展

Gradle Kotlintest中的数据表测试-高级方法名称和测试用例的扩展,gradle,kotlin,kotlintest,parameterized-tests,Gradle,Kotlin,Kotlintest,Parameterized Tests,我使用Kotlintest和data tables来测试使用Kotlin、SpringBoot和Gradle的应用程序,因为当表中有复杂数据时,语法比ParameterizedJunitTests更简洁 有没有一种方法可以在方法标题中使用参数名?此外,我的所有测试执行都列为一个测试,但我希望在每个数据表行的测试结果中有一行。我发现这两个主题都没有出现在报告中 要让事情更清楚,请以Kotlintest为例: class AdditionSpec : FunSpec() { init {

我使用Kotlintest和data tables来测试使用Kotlin、SpringBoot和Gradle的应用程序,因为当表中有复杂数据时,语法比ParameterizedJunitTests更简洁

有没有一种方法可以在方法标题中使用参数名?此外,我的所有测试执行都列为一个测试,但我希望在每个数据表行的测试结果中有一行。我发现这两个主题都没有出现在报告中

要让事情更清楚,请以Kotlintest为例:

class AdditionSpec : FunSpec() {
    init {

        test("x + y is sum") {
            table(
                    headers("x", "y", "sum"),
                    row(1, 1, 2),
                    row(50, 50, 100),
                    row(3, 1, 2)
            ).forAll { x, y, sum ->
                assertThat(x + y).isEqualTo(sum)
            }
        }
    }
}
以及JUnit的相应示例:

@RunWith(Parameterized::class)
class AdditionTest {

    @ParameterizedTest(name = "adding {0} and {1} should result in {2}")
    @CsvSource("1,1,2", "50, 50, 100", "3, 1, 5")
    fun testAdd(x: Int, y: Int, sum: Int) {
        assertThat(x + y).isEqualTo(sum);
    }

}
有1/3的故障: 科特林特: 朱尼特:


当使用数据表时,kotlintest中是否有类似于
@ParameterizedTest(name=“添加{0}和{1}会导致{2}”)
的内容?

这可以使用FreeSpec和减号操作符,如下所示:

class AdditionSpec : FreeSpec({

    "x + y is sum" - {
        listOf(
            row(1, 1, 2),
            row(50, 50, 100),
            row(3, 1, 2)
        ).map { (x: Int, y: Int, sum: Int) ->
            "$x + $y should result in $sum" {
                (x + y) shouldBe sum
            }
        }
    }
})
这将在Intellij中提供此输出:


请参阅此文件中的文档

您可以反向嵌套。不要在
test
中包含
,只需在
中嵌套
test

class AdditionSpec : FunSpec() {
    init {
        context("x + y is sum") {
            table(
                headers("x", "y", "sum"),
                row(1, 1, 2),
                row(50, 50, 100),
                row(3, 1, 2)
            ).forAll { x, y, sum ->
                test("$x + $y should be $sum") {
                    x + y shouldBe sum
                }
            }
        }
    }
}