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.
- Cómo detener y reiniciar una actividad en una prueba de instrumentación de Android?
- Android: ¿Cómo puedo guardar, borrar y restaurar SharedPreferences para la prueba de unidades?
- ¿Cómo puedo comprobar en Robotium que la aplicación ha terminado?
- Soft teclado no está presente, no se puede ocultar el teclado - Appium android
- Problema con Android IAP, sin OrderID en el objeto de compra
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?
- Android en las pruebas de suscripción de aplicaciones
- ApplicationTestCase obsoleto en el nivel 24 de API
- ¿Cómo forzar un cambio de orientación en una prueba de instrumentación de Android?
- Carpeta de activos en Android Studio Unit Test
- Cómo probar la aplicación empresarial android en varios dispositivos
- Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
- Pruebas de facturación en la aplicación con cuentas de prueba
- Java.lang.RuntimeException: ¡Stub! - ¿Cobertura de código de Android?
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!