¿Cómo inyectar reemploops de testing en el gráfico de dependencia pnetworkingeterminado?

Me gustaría insert anulaciones burladas en mis testings de instrumentación de Android usando Kodein. No sé cuál es el enfoque óptimo para hacer esto. Esto es lo que tengo en mente:

  • Mi aplicación usa una class de aplicación KodeinAware . La instancia Kodein servida contiene todas las dependencies requeridas por mi aplicación.
  • En mis testings me gustaría inyectar reemploops burlados para dependencies específicas para probar el comportamiento de la aplicación en diversas situaciones.
  • Las anulaciones deben ser diferentes para cada testing, y se deben inyectar antes / mientras se ejecuta la testing.

¿ La extensión de Kodein configurable es sensible en esta situación, o hay un enfoque más simple y adecuado (y, en caso afirmativo, cuál)?

Si su testing tiene una instancia de Kodein (lo que significa que puede usar un object Kodein diferente del que tiene su Application ), el enfoque recomendado es crear un nuevo object Kodein que amplíe el de la aplicación y anule todas las vinculaciones necesarias. .

 val testKodein = Kodein { extend(appKodein()) bind<MyManager>(overrides = true) with singleton { mock<MyManager>() } } 

La opción de Kodein configurable solo se recomienda si está utilizando un "Kodein verdadero" estático. Su uso impide la posibilidad de ejecutar testings en paralelo (porque todas tienen acceso a la misma instancia de Kodein), y te obliga a clear el ConfigurableKodein entre cada testing y volver a declarar cada vez que se reemplazan.

Ahora estoy usando el ConfigurableKodein dentro de mi class de App personalizada.

 class App : Application(), KodeinAware { override val kodein = ConfigurableKodein() override fun onCreate() { super.onCreate() // A function is used to create a Kodein module with all app deps. kodein.addImport(appDependencies(this)) } } // Helper for accessing the App from any context. fun Context.asApp() = this.applicationContext as App 

Dentro de mi class AppTestRunner , declaro que la configuration es mutable. De esa manera puedo restablecer su configuration entre todas y cada una de las testings.

 class AppTestRunner : AndroidJUnitRunner() { override fun callApplicationOnCreate(app: Application) { app.asApp().kodein.mutable = true super.callApplicationOnCreate(app) } } 

Creé una regla JUnit que restablece el gráfico de dependencia antes de cada testing.

 class ResetKodeinRule : ExternalResource() { override fun before() { val app = InstrumentationRegistry.getInstrumentation().targetContext.asApp() app.kodein.clear() app.kodein.addImport(appDependencies(app)) } } 

En mis testings, ahora puedo recuperar la instancia de App.kodein e inyectar App.kodein que anulan las dependencies del gráfico original. Lo único que se debe garantizar es que la actividad probada se inicie después de configurar los simulacros o que el comportamiento no sea pnetworkingecible.

  • ¿Cómo un código de testing unitaria envuelto en `runOnUiThread`?
  • No puedo ver la variable Kotlin en el estudio Android
  • kotlin-android null no se puede convertir a tipo no nulo kotlin.String
  • Llamando countDownTimer
  • Referencias de funciones y lambdas
  • Cómo acceder al valor de campo en el método de propiedad get ()
  • Single.zip completando antes de Success
  • "Convertir" Clase de vista a anotación android
  • ¿Cuáles son las reglas de inferencia de punto y coma en Kotlin?
  • Cómo importar un directory / package completo en Intellij para fines de testing
  • Kotlin getter setter sin campo