问题描述
在使用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)