2011-03-07 18 views
16

estoy tratando de encontrar una manera para que mis pruebas de instrumentación para tener acceso a recursos de cadena generadas dentro del paquete de prueba.recursos de pruebas de instrumentación Acceso

Más detalles:

que tienen un caso de prueba de Android que hereda de ActivityInstrumentationTestCase2. Utilicé el nuevo Android Test Project de Eclipse para crear la prueba en primer lugar. El proyecto de prueba tiene recursos (similares a los recursos para un proyecto regular de Android). Estoy tratando de encontrar una forma de acceder mediante programación a los recursos de cadena en el proyecto de prueba en las diversas pruebas individuales. He tratado:

String s = getInstrumentation().getContext().getString(R.string.blah); 

y

String s = mActivity.getApplicationContext().getString(R.string.blah); 

Ambos métodos arrojan un NotFoundException. Tengo la cadena "blah" definida en mi strings.xml. R en el código anterior es una importación de mi paquete de prueba y no del paquete de la aplicación bajo prueba. Puedo acceder a los recursos definidos en el paquete de la aplicación con la última llamada.

Sería útil encontrar una forma de acceder a los recursos de cadenas XML definidos en mis pruebas (ya que quiero evitar escribir cadenas en el código). ¿Qué estoy haciendo mal?

Respuesta

1

Creo que esto no es posible sin almacenar los archivos de recursos en otro lugar, pero puedes usar algo como Robotium donde solo usas Solo.getString() y obtienes tu recurso.

3

me trataron:

String s = getInstrumentation().getContext().getString(com.myProject.test.R.string.blah); 

donde com.myProject es el paquete del proyecto para ser probado y com.myProject.test es el paquete del proyecto de prueba.

que trabajó para mí si yo coloco el código dentro setup(). No funciona si lo coloco dentro del constructor.

17

Incluso si este post ya no es actual - esto además podría ayudar a alguien:

Para entender cómo funciona esto, hay que tener en cuenta que el contexto de su instrumentación vive es otra que el contexto de la aplicación estás ejecutando tu prueba en contra. Como dijiste correctamente, NO PUEDES acceder a los recursos de tu objetivo desde el contexto de la instigación. Se pueden definir algunos por su contexto de instrumentación en un archivo XML independiente dentro del proyecto de prueba, o - si desea hacer uso de los recursos predefinidos - usted puede conseguir de esta manera:

Resources res = getInstrumentation().getTargetContext().getResources(); 
res.getString(R.string.xxx); // get a string resource 

Ni el contexto de instrumentación (como escribió Wujun), ni el contexto del objetivo está disponible, hasta que la construcción del caso de prueba se haya completado completamente.

+4

El "getTargetContext()" en lugar de "getContext()" hizo el truco :-) (¿y el póster puede marcar una respuesta como "aceptado"?) – Christine

+0

En la versión 0.5 del corredor de prueba (de soporte), el método getInstrumentation() se elimina. Use InstrumentationRegistry.getTargetContext() en su lugar, para obtener el contexto. – Metallica

Cuestiones relacionadas