我有一个用Java编写的JUnit 5测试类,它使用一个注释为@RegisterExtension的字段,它工作得很好:

class RegisterExtensionTest {

    @RegisterExtension
    LoggingExtension log = new LoggingExtension(RegisterExtensionTest.class);

    @Test void demoTest() {
        ...
    }
}

When I convert it to Kotlin:

class RegisterExtensionTest {

     @RegisterExtension
     var log = LoggingExtension(RegisterExtensionTest::class.java)

     @Test
     fun demoTest() {
        ...
    }
}

现在LoggingExtension不再跑了.为什么?

推荐答案

As documented here, just add a @JvmField annotation to the field, and it works.

class RegisterExtensionTest {

     @JvmField
     @RegisterExtension
     var log = LoggingExtension(RegisterExtensionTest::class.java)

     @Test
     fun demoTest() {
        ...
    }
}

The extension field has to be public (and JUnit doesn't warn you if it isn't), but in Kotlin, a property creates a private field and a getter in the byte code, so JUnit doesn't see it.

Kotlin相关问答推荐

Kotlin协程挂起继续线程

我可以在kotlin/java.util.scanner中跳过分隔符而不重复吗?

kotlin短路列表判断吗?

通过快捷键手动砍掉功能参数等

Kotlin .如何用从 1 到 90 的 5 个唯一数字填充列表中的每一行?

为什么这两个 Kotlin 协程函数不一样?

为什么这个 Kotlin 代码不起作用? (如果 str[index] 在列表中,则打印)

Eclipse:无法安装 Kotlin 插件

匹配在单词边界上包含特殊字符的变量字符串的正则表达式

Saripaar formvalidation 在 kotlin 中第二次不起作用

Kotlin JS JSON 反序列化

如何退出 Kotlinc 命令行编译器

将 jetpack compose 添加到现有元素

如何在 Kotlin 中判断数组类型(不是泛型类型)

Kotlin的web-framework框架

在Kotlin中为Android编写库会有开销吗?

Kotlin中的属性(properties)和参数(parameters)有什么区别?

如果kotlin已经有了getter和setter,为什么在数据类中有componentN函数?

Kotlin 中内部可见性修饰符的范围

如何在 Kotlin 中按字母顺序对字符串进行排序