使用 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) 中做到这一点?
最佳答案
我有类似的问题。我只需要制作该字段 final
在 kotlin 中(除了用 @JvmField
对其进行注释):
val wiremockPort = 8081
@RegisterExtension
@JvmField
final val wireMockServer = WireMockTestRunner(wiremockPort)
关于kotlin - 带有 JUnit5 的 Kotlin 1.4 中的非静态 @RegisterExtension 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64280421/