运行gradle测试时找不到嵌套Kotlin类中的JUnit测试

Ste*_*ris 5 gradle kotlin junit5

当我在Kotlin的嵌套类中指定测试时,如下所示...

import org.junit.jupiter.api.*

class ParentTest
{
    @Nested
    class NestedTest
    {
        @Test
        fun NotFoundTest() {}
    }

    @Test
    fun FoundTest() {}
}
Run Code Online (Sandbox Code Playgroud)

...使用gradle运行测试时,JUnit无法识别它。仅FoundTest找到并运行。

我正在使用JUnit 5.1和Kotlin 1.2.30和Gradle 4.6。

Ste*_*ris 9

将嵌套类定义为内部类可以解决此问题。

class ParentTest
{
    @Nested
    inner class NestedTest
    {
        @Test
        fun InnerTestFound() {}
    }

    @Test
    fun FoundTest() {}
}
Run Code Online (Sandbox Code Playgroud)

正如Sam Brannen指出的“默认情况下,Kotlin中的嵌套类类似于staticJava中的类”并且JUnit文档指出

只有非静态嵌套类(即内部类)才能用作@Nested测试类。

将类标记为innerKotlin会编译为非静态Java类。

  • `testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'` 和 `testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.3.1'` 与 Kotlin `1.3.0` 嵌套类根本无法识别 - 其中的测试不会出现在测试列表中。 (4认同)
  • 您是否将org.junit.jupiter.api.Test用作导入? (3认同)
  • 我遇到了同样的问题,但@user949884 是对的,我没有正确的导入。我导入了 org.junit.Test 而不是导入 org.junit.jupiter.api.Test。更改导入后,找到了测试。 (3认同)

Mar*_*ipp 5

文档中

仅非静态嵌套类(即内部类)可以用作@Nested测试类。

因此,您需要上NestedTestinner堂课。

  • 是的,默认情况下,Kotlin 中的 _nested_ 类类似于 Java 中的“静态”类。 (2认同)