使用注释为“@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 看不到它。
我有一个用 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 看不到它。