Издевательское финальное поле с Котлином

Я новичок в Котлине, Мокито. Ниже код имеет ошибку, вызванную engine , неизменяемое поле, которое не издевается.

Я потратил много времени, пытаясь решить эту проблему. Я обнаружил, что способ насмешливых работ, пока я не пойму и не удовлетворю это.

  1. переместите поле в конструктор. class Car(val engine: Engine) { ... }
  2. изменение в изменяемое поле. private var engine = Engine()

Есть ли другой путь?

 class Car { private val engine = Engine() // here var state: String? = null fun move() { state = engine.state } } @RunWith(MockitoJUnitRunner::class) class CarTest { @Mock private lateinit var mockedEngine: Engine @InjectMocks private val car = Car() @Test fun test() { `when`.(mockedEngine.state).thenReturn("run") car.move() assertEquals("run", car.state) } } 

введите описание изображения здесь

Думаю, вы уже ответили на свой вопрос. Другого хорошего решения нет. То, что вы предлагаете в качестве вариантов (предпочтительно, первый), является правильно спроектированным классом для проверки.

Intereting Posts
Грейд занимает время спереди, казалось бы, ничего не делает Какой способ лучше, если я надеюсь использовать синтаксис, как статическая функция в Котлин? Как я могу приостановить событие, проходящее через наблюдаемое? Как получить и найти текущее состояние на машине состояния Spring? не может быть передан в org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror Ошибка при запуске кодов, которые смешивают java с androidstudio Как получить значение перечисления типа raw из класса enum и строки в kotlin Как ссылаться на конструктор запечатанного в Котлин? Библиотека Glide java.lang.NoClassDefFoundError Spring Boot 2 & Kotlin 1.2.1: устаревшая версия времени выполнения Почему sumBy (селектор) не возвращает Long? Справочный каталог проекта из любого места Как передать значения из активности в другую деятельность в котлин Kotlin проверка недействительности if-else функциональный подход … Как? String to Double на Android / Kotlin