¿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.

  • Kotlin: Evite crear FqNameUnsafe y FqName
  • ¿Cómo lidiar con los límites generics migrando de Java a Kotlin?
  • Vista de actualización de Android después del éxito de JSONRequest
  • Android comtesting si la input de text (hora) coincide con el formatting
  • La anotación de ButterKnife @OnClick no funciona en el fragment de Kotlin
  • Kotlin y Java en el mismo proyecto utilizando Eclipse IDE
  • ¿El mapTo () de Kotlin sobrescribirá los datos que ya están en la matriz?
  • Verifique lists de objects para igualdad sin control de order en su propiedad Lista
  • Producir una list de un ResultSet
  • No se puede enviar datos de formulario / múltiples con Volley
  • ¿Qué versión de Dokka va con qué versión de Kotlin?