为了账号安全,请及时绑定邮箱和手机立即绑定

在 Kotlin 中打开 getter 以将其与 Mockito 一起使用

在 Kotlin 中打开 getter 以将其与 Mockito 一起使用

临摹微笑 2021-09-03 15:44:31
Kotlin 可以自动为主要构造函数参数创建 getter(这很棒),并且所有这些 getter 默认情况下都是最终的(未打开)。我有一堂课(在 Kotlin 中):open class SongCategory(val id: Long,                        val type: SongCategoryType,                        val name: String? = null,                        var displayName: String? = null,                        var songs: List<Song>? = null) {}我想在一些 Mockito 测试中使用它(在 Java 中):SongCategory songCategory = mock(SongCategory.class);// the line below produces MissingMethodInvocationExceptionwhen(songCategory.getDisplayName()).thenReturn("Dupa");这MissingMethodInvocationException是因为 Mockito 需要被模拟的类是开放的(不是最终的),而被模拟的方法getDisplayName()只需要是开放的,但事实并非如此。我无法打开这个 getter 或创建另一个覆盖 getter,因为它与为构造函数自动创建的最终 getter 冲突。我可以将这些所有参数移动到辅助构造函数并分别创建所有属性和 getter。但是,如果我必须编写与 Java 相同的样板代码,那么使用 Kotlin 有什么意义呢?有什么方法可以将 Mockito 与 Kotlin 编译的 getter 一起使用吗?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我同意@Unknown,您可以在某些地方使用该kotlin-allopen插件。但在这种情况下,由于您要做的只是模拟 Kotlin 类(未打开),因此您只需要添加mockito-inline插件即可。


将以下内容添加到您的build.gradle:


testImplementation 'org.mockito:mockito-core:2.13.0' // use the latest version

testImplementation 'org.mockito:mockito-inline:2.13.0'


查看完整回答
反对 回复 2021-09-03
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

实际上,我发现打开 getter 的语法非常简单(虽然它不在官方文档中):


open class SongCategory(...

                        open var displayName: String? = null,

                        ...) {

}

这会打开属性的 getter 和 setter。


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信