使用注释为“@RegisterExtension”的字段的 JUnit 5 测试在 Kotlin 中不起作用

JUnit 5 test with a field annotated as `@RegisterExtension` doesn't work in Kotlin

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

class RegisterExtensionTest {

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

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

当我将其转换为 Kotlin 时:

class RegisterExtensionTest {

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

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

现在 LoggingExtension 不再 运行。为什么?

如文档所述 here,只需向该字段添加一个 @JvmField 注释,它就会起作用。

class RegisterExtensionTest {

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

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

扩展字段必须是 public(如果不是,JUnit 不会警告您),但在 Kotlin 中,属性 在字节码中创建一个私有字段和一个 getter,因此 JUnit 看不到它。