Burlarse del campo final con Kotlin

Soy novato en Kotlin, Mockito. El código siguiente tiene un error que es causado por el engine , un campo inmutable que no se burla.

Pasé mucho time tratando de resolver este problema. Encontré que una forma de burlarse funciona, hasta que no entiendo y no lo satisfago.

  1. mover un campo al constructor class Car(val engine: Engine) { ... }
  2. cambiar a campo mutable private var engine = Engine()

¿Hay alguna otra manera?

 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) } } 

enter image description here

Creo que ya has respondido tu pregunta. No hay otra buena solución. Lo que sugiere como las opciones (preferiblemente la primera) es una class diseñada adecuadamente para que sea comprobable.