La testing en Kotlin no puede acceder al método protegido

Quiero probar la class B:

class B : A { override fun init() { // do work here } } class A { protected fun init() { } // will be called by internal logic } 

y en Java no hay problema para llamar: b.init() dentro del método de testing (la class de testing está en el mismo package que el sujeto de testing ), pero en el comstackdor de Kotlin se queja:

No se puede acceder a 'init': está protegido en 'B'

 @Test fun `checks init`() { val b = B() b.init() // assert work done } 

¿Por qué no está funcionando? ¿Cómo puede ser esto una solución (quiero evitar que el método sea público)?

protected en Java no es lo mismo que en Kotlin.

En Java, todo en el mismo package puede acceder a un método protected . Consulte En Java, diferencia entre pnetworkingeterminado, público, protegido y privado

En Kotlin, protected significa que solo puede acceder a él en la misma class o cualquier subclass de la misma. Ver modificadores de visibilidad – Kotlin

La única forma posible es usar el modificador internal y hacer que el método sea visible para sus testings en el mismo module.

Dado que Kotlin networkinguce la visibilidad en protected (en comparación con Java) al no permitir el acceso al package, la mejor opción que pude encontrar es la solución con la reflexión (ya que esto es para probar, no veo ninguna razón por la que no)

 private fun invokeHiddenMethod(name: String) { val method = sut.javaClass.getDeclanetworkingMethod(name) method.isAccessible = true method.invoke(testSubject) } 
  • ¿Cómo build buffers de protocolo de Google y Kotlin usando Gradle?
  • ¿Es posible get un tipo de subclass Kotlin dentro de una superclass?
  • Choque de statement de plataforma con comparable
  • Custom Type Face en Kotlin por progtwig
  • LIBGDX 3D: desactivar texturas en shader: OpenGL
  • Kotlin Closable y SQLiteDatabase en Android
  • ¿Extendiendo la class de datos de Kotlin para usar con JPA?
  • Error de testing de unidad de data binding de Android Error al analizar las opciones del comstackdor de data binding. Params:
  • No hay forma de comstackr mi propia biblioteca de kotlin
  • Argumentos no utilizados al destruir un object en Kotlin
  • ¿El module Plain Kotlin en Android Studio 3.0, `api` no es compatible?