当前位置: 首页 > 知识库问答 >
问题:

使用JUnit5的静态编程语言1.4中的非静态@寄存器扩展字段

糜正业
2023-03-14

当使用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.

当我试着运行它的时候。

如果我尝试添加一个< code>@JvmField注释:

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

它失败,而是出现编译时错误:

JvmField can only be applied to final property

我能做的是将它移动到一个同伴对象:

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

现在它可以工作了。但是我不能在伴随对象中声明myExpress,因为构造函数的输入(...)还不可用。我只是希望它以与上面Java示例中相同的方式执行。

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

共有1个答案

阎晋
2023-03-14

我也有类似的问题。我只需要在kotlin中使字段< code>final(除了用< code>@JvmField注释它之外):

val wiremockPort = 8081

@RegisterExtension
@JvmField
final val wireMockServer = WireMockTestRunner(wiremockPort)
 类似资料:
  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 假设我想要一个类型变量T,它扩展了某个类并实现了一个接口。类似于: Kotlin中的语法是什么?

  • 我试图在基于静态编程语言的gradle文件中使用以下内容构建一个胖罐子。 但是,胖罐扩展了所有依赖项。我希望将jars按原样包含在/lib目录中,但我无法弄清楚如何实现这一点。 谁能给我一些建议,告诉我如何才能做到这一点? 谢啦

  • 我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler