Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Prueba de unidad en la función de extensión de Kotlin en las clases de SDK de Android

Función de extensión de Kotlin es grande. Pero, ¿cómo podría realizar la prueba de unidad en ellos? Especialmente aquellos que son de SDK de Android proporcionan clase (por ejemplo, Contexto, Diálogo).

Proporciono dos ejemplos a continuación, y si alguien pudiera compartir cómo podría ensayarlos en una unidad, o si necesito escribirlos de forma diferente si realmente quiero probarlos en una unidad.

fun Context.getColorById(colorId: Int): Int { if (Build.VERSION.SDK_INT >= 23) return ContextCompat.getColor(this, colorId) else return resources.getColor(colorId) } 

y

 fun Dialog.setupErrorDialog(body : String, onOkFunc: () -> Unit = {}): Dialog { window.requestFeature(Window.FEATURE_NO_TITLE) this.setContentView(R.layout.dialog_error_layout) (findViewById(R.id.txt_body) as TextView).text = body (findViewById(R.id.txt_header) as TextView).text = context.getString(R.string.dialog_title_error) (findViewById(R.id.txt_okay)).setOnClickListener{ onOkFunc() dismiss() } return this } 

Cualquier sugerencia ayudaría. ¡Gracias!

  • ¿Cómo puedo rotar el emulador de Android desde el código de prueba?
  • ¿Cómo compartir recursos entre la prueba de unidad y la prueba de instrumentación en android?
  • Error de cifrado en Android 4.2
  • Android Studio Gradle androidTest vs instrumentTest
  • Pruebas de unidad en Android Studio 0.8
  • Prueba de la unidad de Android con AsyncTask y la solución de actualizaciones de interfaz de usuario
  • Pruebas unitarias Llamadas JNI
  • Prueba de la excepción ClassNotFound
  • One Solution collect form web for “Prueba de unidad en la función de extensión de Kotlin en las clases de SDK de Android”

    La forma en que estoy probando funciones de extensión en las clases de Android en este momento es burlándose de la clase de Android. Sé que esto no es una solución óptima ya que se burla de la clase bajo prueba y requiere cierto conocimiento sobre cómo funciona la función (como siempre es el caso cuando se burlan), pero como las funciones de extensión se implementan internamente como funciones estáticas supongo que es aceptable Hasta que alguien venga con algo mejor.

    Como ejemplo, considere la clase JsonArray . Hemos definido una función de extensión para recibir el índice del último elemento:

     fun JSONArray.lastIndex() = length() - 1 

    La prueba de acuerdo (utilizando el marco de prueba de Spek y mockito-kotlin ) se parece a esto.

     @RunWith(JUnitPlatform::class) object JsonExtensionTestSpec : Spek({ given("a JSON array with three entries") { val jsonArray = mock<JSONArray> { on { length() } doReturn 3 } on("getting the index of the last item") { val lastIndex = jsonArray.lastIndex() it("should be 2") { lastIndex shouldBe 2 } } } given("a JSON array with no entries") { val jsonArray = mock<JSONArray>({ on { length() } doReturn 0 }) on("getting the index of the last item") { val lastIndex = jsonArray.lastIndex() it("should be -1") { lastIndex shouldBe -1 } } } }) 

    La dificultad con sus funciones es, que también utilizan las clases de Android internamente. Desafortunadamente no tengo una solución para esto ahora mismo.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.