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

时间:2018-03-08 19:17:45

标签: gradle kotlin junit5

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

import org.junit.jupiter.api.*

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

    @Test
    fun FoundTest() {}
}

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

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

2 个答案:

答案 0 :(得分:5)

将嵌套类定义为an inner class可以解决此问题。

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

    @Test
    fun FoundTest() {}
}

作为Sam Brannen indicates“默认情况下,Kotlin中的嵌套类类似于Java中的static类”the JUnit documentation indicates

  

只有非静态嵌套类(即内部类)可以作为   @Nested测试类。

在Kotlin中将类标记为inner编译为非静态Java类。

答案 1 :(得分:5)

来自documentation

  

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

因此,您需要将NestedTest设为inner类。