es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    class TestApplication: BaseApplication() {
        override val di: DI = DI.lazy {
            import (módulos) // importar los módulos originales
            importar (moduleOverrides) // importar los módulos anulados con allowSilentOverride = true
        }
    }
    

    Luego, en su clase MainActivityTest, puede obtener una instancia de TestApplication y utilizarla en sus pruebas:

    @RunWith(AndroidJUnit4::class)
    clase MainActivityTest {
        @get: Rule
        val composeTestRule = createAndroidComposeRule <mainactivity> ()
    
        val moduleOverrides = DI.Module (allowSilentOverride = true) {
            // agregar enlaces para falsificaciones con allowOverride = true
        }
    
        @Before
        fun setup () {
            val application = ApplicationProvider.getApplicationContext () como TestApplication
            composeTestRule.setContent {
                TestTheme {
                    MyApp (solicitud)
                }
            }
        }
    
        // tus pruebas aquí
    }
    

    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.

Comments are closed.