Pruebas instrumentadas de Android con KodeIn.
Tenemos una aplicación de Android que utiliza Compose para la capa de vista y estamos usando Kodein para todas nuestras inyecciones de dependencias.
Tengo una clase BaseApplication que es DIAware:
class BaseApplication : Application(), DIAware {
override val di: DI = DI.lazy {
import(modules) // los módulos se definen en los paquetes respectivos
}
}
También tengo un MainActivity y un gráfico de navegación para administrar la navegación entre los diferentes Composables.
Problema:
¿Cómo puedo sobrescribir correctamente estos módulos en mis pruebas instrumentadas para MainActivity?
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
val moduleOverrides = DI.Module(allowSilentOverride = true) {
// agregar vinculaciones para falsificaciones con allowOverride = true
}
@Before
fun setup() {
val application =
ApplicationProvider.getApplicationContext() as BaseApplication
// ¿cómo puedo sobrescribir los módulos de BaseApplication para mi prueba?
}
}
No puedo encontrar ningún lenguaje claro sobre el asunto y siento que me estoy perdiendo algo muy obvio. Cualquier ayuda sería muy apreciada.
davy.ai
Para anular correctamente los módulos en sus pruebas instrumentales para MainActivity, puede crear una clase TestApplication que extienda BaseApplication y anule los módulos necesarios.
Aquí hay un ejemplo de cómo hacerlo:
Luego, en su clase MainActivityTest, puede obtener una instancia de TestApplication y utilizarla en sus pruebas:
Aquí, estamos usando
setContent
para configurar la prueba de composición con la clase MyApp que toma TestApplication como un parámetro. Esta clase MyApp debe ser la misma que la que está utilizando en su código de producción, pero con TestApplication en lugar de BaseApplication.Con estos cambios, su prueba ahora debería poder anular correctamente los módulos en su BaseApplication.