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) } 
  • Clase de datos de Kotlin con properties derivadas
  • ¿Por qué get classs en Kotlin usando dos puntos (: :)?
  • Encabezados HTTP no devueltos en EC2
  • ¿Cómo hago la compilation de post-compilation en Maven?
  • Escribir en el file después del partido en Kotlin
  • Kotlin - Cómo convertir String a ByteArray
  • La información no se carga correctamente en Firebase-Firerestre
  • kapt: cómo get comentarios fuente?
  • Mezcla de Kotlin con error de Java: no se puede encontrar el símbolo
  • Nueva architecture con Dagger y Kotlin
  • Kotlin y ejemplificación de matriz detallada