Escribir / crear archivos dentro del contexto de la instrumentación de Android

Tengo una clase que crea (o abre) un archivo para escribir algunos datos a él. Esta clase recibe un Contexto en el constructor, lo guarda en un campo de instancia y luego lo utiliza para llamar al método context.openFileOutput.

Al ejecutar la aplicación, instanciar esta clase pasando el ApplicationContext como el contexto, y todo está funcionando como se esperaba.

Sin embargo, cuando intento probar esta clase con una prueba de instrumentación, obtengo una NullPointerException . Estoy pasando el getInstrumentation().getContext() , que sé corresponde al contexto de la prueba, y no el de la aplicación real.

 getInstrumentation().getContext().openFileOutput("myFile", Context.MODE_PRIVATE); // This throws NullPointerException :( :( 

Dentro de la prueba, necesito que este archivo se cree en el paquete de prueba y no en el paquete de la aplicación, ya que no quiero sobrescribir el archivo en mi aplicación.

Sé que hay una clase RenamingDelegatingContext ahí fuera, pero no puedo pasar este contexto a mi clase ya que mi clase también abre un recurso sin formato, y quiero que ese recurso sea diferente al ejecutar la prueba.

He buscado mucho sobre esto, y no hay documentación sobre el Contexto de Instrumentación. No pude encontrar sus limitaciones ni nada que resuelva mi problema.

¿Sabes cómo hacer frente a esto?

No puedo recordar cuándo se cambió esto, pero el método actual para obtener un objeto Context durante las pruebas instrumentadas es importar

import android.support.test.InstrumentationRegistry;

y llama

InstrumentationRegistry.getContext();

¡Espero que esto ayude!

  • Uso de la actividad de no producción para probar con Android Studio
  • Prueba de un servicio de accesibilidad de Android?
  • ¿Cómo enviar eventos clave a un emulador sin cabeza en una prueba de instrumentación?
  • Java y la metodología de prueba de Android
  • Envío de mayúsculas a un TextEdit durante pruebas instrumentadas
  • Prueba de Android fuera del espacio de almacenamiento
  • Cómo detener una aplicación de Android desde la consola
  • Soluciones actuales para probar aplicaciones de Android
  • ¿Cómo probar una ListActivity burlándose de su contentProvider y así aislar la prueba de la base de datos?
  • ¿Cómo puedo obtener identificadores, nombres o rutas x para elementos ui utilizados en una aplicación para móviles (Android / iOS) para pruebas de automatización móvil?
  • ¿Por qué no hay instrumentación de prueba para BroadcastReceiver?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.