【问题标题】:Use Kotlin annotation class in Java class在 Java 类中使用 Kotlin 注解类
【发布时间】:2018-07-06 11:33:44
【问题描述】:

我正在用 Kotlin 编写新功能,但有些东西已经用 Java 编写了。

我正在 Mockito(Kotlin) 中编写测试,但 Mockito 的最终类有问题,所以我创建了:

annotation class Mockable {}

并添加到Gradle-build

apply plugin: 'kotlin-allopen'

allOpen {
    annotation('com.Mockable')
}

所以使用这个注解类我可以模拟Kotlin 类。

如何在 Java 类中使用这个注解?

【问题讨论】:

  • 你试过只用@Mockable吗?

标签: java android kotlin annotations mockito


【解决方案1】:

Java 中不需要它。但不管怎样,还有一种替代方法可以将 MockitoKotlin 一起使用:

创建一个文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker,内容如下:

mock-maker-inline

这改变了模拟行为以支持final 类,如 Kotlin 类。对于某些 Java 类,我不得不在之后使用 spy() 而不是 mock()

【讨论】:

  • 我看到了这个选项,但它的性能几乎慢了 3 倍
【解决方案2】:

如何在 Java 类中使用这个注解?

您不能以这种方式使用此注解,因为kotlin-allopen 仅适用于 Kotlin 类。在 Java 中,只是不要将类标记为 final...

就此而言,在 Kotlin 中,如果我理解正确的话,它似乎也没有用:kotlin-allopen 用于以某种方式处理注释时需要创建带注释类型的子类,所以你' d 需要写open以及注解。在这里,你可以写open 而不是 @Mockable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多