【问题标题】:JUnit test in nested Kotlin class not found when running gradle test运行 gradle 测试时未找到嵌套 Kotlin 类中的 JUnit 测试
【发布时间】:2018-08-17 06:18:37
【问题描述】:

当我在 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。

【问题讨论】:

    标签: gradle kotlin junit5


    【解决方案1】:

    将嵌套类定义为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

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

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

    【讨论】:

    • @Sevastyan 您的所有其他测试都按预期得到认可?你用的是什么版本?
    • testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.3.1' 与 Kotlin 1.3.0 嵌套类根本无法识别 - 其中的测试不会出现在测试列表中。
    • 您的其他(非嵌套)测试是否按预期识别?
    • 是的,可以识别其他顶级测试。
    • 我遇到了同样的问题,但@user949884 是对的,我没有正确导入。我有 import org.junit.Test 而不是 import org.junit.jupiter.api.Test。更改导入后,找到了测试。
    【解决方案2】:

    来自documentation

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

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

    【讨论】:

    • 我确实读过,但请注意这是 Java 文档。 'static' 在 Kotlin 中不是一个东西,对'inner' 类的引用与inner classes in kotlin 的'inner' 关键字并不完全相同。例如,这是否意味着默认情况下 Kotlin 类都编译为静态类?也就是说,阅读这就是为什么我尝试将类指定为 (Kotlin) 内部的原因,只是不确定具体细节。
    • 是的,默认情况下,Kotlin 中的 嵌套 类类似于 Java 中的 static 类。
    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2017-08-30
    • 2020-03-25
    • 2011-01-20
    • 1970-01-01
    • 2021-10-25
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多