微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JUnit5的Kotlin 1.4中的非静态@RegisterExtension字段

如何解决使用JUnit5的Kotlin 1.4中的非静态@RegisterExtension字段

在使用Java和JUnit 5时,我可以使用非静态字段注册扩展,如下所示:

@RegisterExtension
MyExtension myExtension = new MyExtension(...);

当我尝试使用Kotlin(1.4.10)时,似乎无法正常使用。例如,我尝试过:

@RegisterExtension
val myExtension = MyExtension(...)

但是失败了:

org.junit.platform.commons.PreconditionViolationException: Failed to register extension via @RegisterExtension field [private final com.something.someTest.myExtension]: field must not be private.

当我尝试运行它时。

如果我尝试添加@JvmField批注:

@JvmField
@RegisterExtension
val myExtension = MyExtension(...)

它因编译时错误而失败:

JvmField can only be applied to final property

能做的是将其移动到同伴对象:

companion object {
    @JvmField
    @RegisterExtension
    val myExtension = MyExtension(...)
}

现在可以了。但是我无法在同伴对象中声明myExtension,因为构造函数...)的输入尚不可用。我只是希望以与上述Java示例相同的方式执行它。

如何在Kotlin(1.4)中做到这一点?

解决方法

我遇到了类似的问题。我只需要在 kotlin 中创建字段 final(除了使用 @JvmField 对其进行注释):

val wiremockPort = 8081

@RegisterExtension
@JvmField
final val wireMockServer = WireMockTestRunner(wiremockPort)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。