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.

  • ¿Cómo utilizar las anotaciones de Java para guiar Proguard de Android?
  • En android, ¿cómo puedo guardar un flujo RTSP en un archivo mientras lo reproduzco?
  • Cómo cambiar "Elegir una acción" a "Completar acción usando" en Android?
  • Android Studio 0.5.0 reconstrucción no funciona con Proguard
  • ¿Cómo evito que otras aplicaciones de Android accedan a mis actividades?
  • Cómo establecer el ancho que es igual a otro widget en android
  • 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!

  • Android - Cómo descargar los datos en segundo plano en determinados momentos
  • Cómo borrar la pila del historial de actividades al pulsar el botón de inicio?
  • Error de compra de devolución de Google IAB type = 3 subtype = 4
  • ImageButton con diferentes estados tamaño de las imágenes
  • TableLayout con RecyclerView
  • Cambiar el fondo de ProgressDialog
  • 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.