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.

Excepción de Resources$NotFoundException con pruebas multi-módulo de Compose.

Tengo un proyecto Android de varios módulos que incluye un módulo de core-ui con mis temas Compose, componibles reutilizables y recursos (fuentes, dibujables, etc.). Tengo otro módulo llamado search que incluye el módulo core-ui como dependencia.

Cuando ejecuto mis pruebas Compose en mi carpeta de androidTest, obtengo un error de android.content.res.Resources$NotFoundException en varias fuentes. Estas fuentes están ubicadas en core-ui y son utilizadas por search. Sin embargo, cuando ejecuto la aplicación real, las fuentes se cargan sin ningún problema.

¿Cómo puedo configurar mis pruebas de androidTest para tener acceso a estos recursos de fuente desde un módulo diferente?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para configurar tus pruebas androidTest para tener acceso a recursos de fuente de otro módulo, sigue estos pasos:

    1. En el archivo build.gradle del módulo search, agrega el módulo core-ui como dependencia de implementación de prueba:
      dependencies {
         // otras dependencias
         androidTestImplementation project(':core-ui')
      }
      

      Esto hará que los recursos de core-ui estén disponibles para tus pruebas en search.

    2. En el archivo build.gradle del módulo core-ui, agrega el siguiente bloque para exponer tus recursos de fuente a otros módulos:

      android {
         // otra configuración
         sourceSets {
             main {
                 // otras carpetas
                 res.srcDirs += 'src/main/assets/fonts'
             }
         }
      }
      

      Esto hará que el directorio assets/fonts en el módulo core-ui sea visible para otros módulos.

    3. Finalmente, en tus casos de prueba de Compose en search, puedes cargar las fuentes de esta manera:

      fun ExampleTest() {
         // carga las fuentes del módulo core-ui
         val font = Typeface.createFromAsset(
             InstrumentationRegistry.getInstrumentation().targetContext.assets, 
             "fonts/my_font.ttf"
         )
      
         // otro codigo de prueba
      }
      

      Aquí, usamos el método createFromAsset() para cargar la fuente desde el directorio assets/fonts en el módulo core-ui. Ahora puedes usar este objeto font en tus pruebas.

Comments are closed.