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

使用JUnit5的Kotlin 1.4中的非静态@RegisterExtension字段,kotlin,junit,junit5,Kotlin,Junit,Junit5,使用Java和JUnit 5时,我可以使用如下非静态字段注册扩展: @RegisterExtension MyExtension MyExtension=新的MyExtension(…); 当我尝试使用Kotlin(1.4.10)时,我似乎无法让它工作。例如,我试过: @RegisterExtension val myExtension=myExtension(…) 但它在以下方面失败了: org.junit.platform.commons.PreconditionViolationExc

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

@RegisterExtension
MyExtension MyExtension=新的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
@注册扩展
val myExtension=myExtension(…)
它失败,而是出现编译时错误:

JvmField can only be applied to final property
我能做的就是把它移到一个伴星上:

伴生对象{
@JvmField
@注册扩展
val myExtension=myExtension(…)
}
现在它起作用了。但是我不能在伴随对象中声明
myExtension
,因为构造函数(
)的输入还不可用。我只是希望它的执行方式与上面的Java示例相同


在Kotlin(1.4)中如何实现这一点?

我也遇到了类似的问题。我只需要在kotlin中创建字段
final
(除了用
@JvmField
注释它之外):

val wiremockPort = 8081

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