#android #kotlin #mocking #mockk
#Android #kotlin #издевательство #mockk
Вопрос:
Я пытаюсь издеваться над запечатанным классом, который выглядит примерно так:
sealed class Location
class Home: Location{
val name = "Home"
}
Я хотел бы иметь возможность выполнить следующее:
val mockHome = mockk<Home>() {
every { name } answers { "My Home" }
}
Но, к сожалению, когда я запускаю это, он завершается ошибкой со следующей ошибкой:
io.mockk.Исключение MockKException: пропущенные вызовы внутри каждого { … } блок.
Что я делаю не так?
Комментарии:
1. Да, вы не можете. Закрытый класс предназначен для создания замкнутого набора реализаций. Для работы такой логики, как выражение «когда», жизненно важно. Это все равно, что пытаться издеваться над перечислением. Есть ли веская причина для того, чтобы его издевались, а не просто использовали реальный экземпляр?
2. Я думаю, причина может быть проще. Свойство просто стало полем из-за оптимизации компилятора. Вы пробовали обычную функцию?
Ответ №1:
На данный момент вы не можете. но эта проблема была исправлена в этом PR, и мы ждем следующего выпуска Mockk. вы можете отслеживать этот PR для получения дополнительной информации