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

2022-09-04 01:29:07

我有一个编写的测试类,它使用注释为的字段,它工作得很好:JUnit 5Java@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


答案 1

如此所述,只需向字段添加注释即可。@JvmField

class RegisterExtensionTest {

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

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

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


答案 2

推荐