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

标签 java kotlin mockito getter

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 MissingMethodInvocationException
when(songCategory.getDisplayName()).thenReturn("Dupa");

这会产生 MissingMethodInvocationException 因为 Mockito 需要打开模拟类(不是最终的)并且模拟方法 getDisplayName() 只需要打开但它不是。

我无法打开此 getter 或创建另一个重写 getter,因为它与为构造函数自动创建的最终 getter 冲突。

我可以将这些所有参数移动到辅助构造函数并分别创建所有属性和 getter。但是,如果我必须编写与 Java 中相同的样板代码,那么使用 Kotlin 有什么意义呢?

有什么方法可以将 Mockito 与 Kotlin 编译的 getter 一起使用吗?

最佳答案

不要为了测试而打开你的类。相反,请尝试使用编译器插件为您执行此操作。您可以在这里阅读:https://kotlinlang.org/docs/reference/compiler-plugins.html#all-open-compiler-plugin

完成后,您将能够像使用任何其他 Java 类一样使用 Mockito。

关于java - 在 Kotlin 中打开 getter 以将其与 Mockito 一起使用 - MissingMethodInvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213212/

相关文章:

java - AndEngine - Sprite 留在屏幕上......有时

java - Spring ldap 身份验证失败错误代码

unit-testing - 模拟Kotlin类不可模拟

java - Mockito.when() 在模拟 Autowired 对象时无法正常工作

junit - 在 Spring 中模拟 RestTemplate

java - 从集合中模拟排序方法

java - 查询在 Apache Geode 中创建的 Lucene 索引

java - Filereader 上的“没有这样的文件或目录”错误 - Android

android - Jetpack 撰写 : Make full-screen (absolutely positioned) component

android - 如何从 Kotlin 异步闭包保存数据?