kotlin - 带有 JUnit5 的 Kotlin 1.4 中的非静态 @RegisterExtension 字段

标签 kotlin junit junit5

使用 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/

相关文章:

android - 禁用其他子 fragment 的 View 寻呼机滑动

java - 每次动态测试后如何执行代码?

android - `suspendCoroutine`抛出`This job has not completed yet`异常?

java - 如何在android中创建我自己的com.google.android.gms.tasks.Task?

java - 在 Jython 中编写 JUnit 测试

junit - Jenkins 多配置项目不汇总测试结果

java - 如何使用 Maven Failsafe 插件运行 JUnit 5 集成测试?

kotlin - 添加koin测试依赖的Gradle问题

kotlin - 使用 Kotlin Channel 是什么意思?

unit-testing - 单元测试 - 困惑