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()
просто должен быть открыт, но это не так.
Я не могу открыть этот геттер или создать другой переопределяющий геттер, потому что он конфликтует с финальным геттером, автоматически созданным для конструктора.
Я мог бы переместить все эти параметры во вторичный конструктор и создать все свойства и геттеры по отдельности. Однако, если мне нужно написать тот же шаблонный код, что и в Java, тогда какой смысл использовать Kotlin?
Есть ли какой-нибудь способ использовать Mockito с компиляторами, скомпилированными в Kotlin?