Los recursos en su aplicación de prueba y su aplicación principal son accesibles por separado en un caso de prueba de instrumentación. Si desea acceder a los recursos que se encuentran en la res/carpeta de crudo o activos del proyecto de prueba en sí, puede utilizar
getInstrumentation().getContext().getResources()
Para acceder a los recursos en la aplicación que se está probando (la aplicación "objetivo"), utilice
getInstrumentation().getTargetContext().getResources()
Tenga en cuenta, sin embargo, que nunca puede modificar los archivos en la carpeta de activos;
getResources().getAssets().open(sourceFile)
devuelve un InputStream. No hay forma de modificar el archivo. Eso se debe a que los activos se almacenan comprimidos dentro de la APK, y en realidad no se pueden escribir.
Si lo que quiere hacer es modificar la ruta a los archivos que utiliza la actividad que está probando, debe usar ActivityUnitTestCase y setActivityContext() con RenamingDelegatingContext. Esto le permite redirigir el acceso a archivos y bases de datos en un contexto a un nuevo directorio especificando un prefijo de directorio. Incluso puede usar el more complex constructor para ajustar el contexto objetivo para la mayoría de las operaciones, pero use el contexto de la aplicación de prueba para las operaciones de archivos, de modo que la actividad acceda a los archivos almacenados en la aplicación de prueba en lugar de a la aplicación principal. .
Muchas gracias por la gran respuesta. Veo que todavía tengo mucho que aprender sobre las pruebas de Android. Te actualizaré cuando pueda implementar una de estas soluciones. –
Cuando traté de ejecutar InputStream in = getResources(). GetAssets(). Open ("test.txt") en mi aplicación de prueba, y coloqué un archivo llamado "test.txt" en mi directorio de activos, recibí una excepción . –
@glenviewjeff ¿En qué contexto llamabas a getResources()? ¿En un método de prueba o dentro de una actividad lanzada desde una prueba? ¿Estás seguro de que los 'Recursos' que estabas usando provienen de 'getContext()' de la Instrumentación y no de 'getTargetContext()'? –