java - 带有注释为 `@RegisterExtension` 的字段的 JUnit 5 测试在 Kotlin 中不起作用

标签 java kotlin junit5

我有一个用 Java 编写的 JUnit 5 测试类,它使用一个注释为 @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() {
        ...
    }
}

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

关于java - 带有注释为 `@RegisterExtension` 的字段的 JUnit 5 测试在 Kotlin 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079539/

相关文章:

java - python RSA模块如何使用java解密

Java 输出文件格式

java - 由 : java. lang.RuntimeException 引起:Parcelable 读取 Serialized 对象时遇到 IOException

Kotlin:如何异步等待相同方法的列表?

android - Kotlin 协程和 SecurityException

java - 如何在 Junit 5 *before* Spring 测试上下文加载之前获得回调?

java - JUnit 5,如何从 BeforeEach 回调中获取参数化测试参数?

java - Spring security kerberos 适用于 xml 配置,但不适用于 Java 配置

java - Android 应用程序在尝试获取 EditText 值时崩溃

java - 将参数从 JUnit 5 @BeforeEach 传递到单独的测试