No se puede abrir la base de datos en la aplicación de prueba de Android

Estoy intentando probar los métodos de la inserción y de la recuperación para mi subclase de SQLiteOpenHelper en una aplicación de Androide. La subclase SQLLiteHelper existe en la aplicación bajo prueba y crea una base de datos en la carpeta de instalación. Sin embargo, la prueba de unidad existe en un InstrumentTestCase en la aplicación de prueba, y me gustaría crear una base de datos de prueba en la aplicación de prueba.

Desafortunadamente, si intento crear / abrir una base de datos en la aplicación de prueba, obtengo la siguiente excepción:

 android.database.sqlite.SQLiteException: unable to open database file at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1584) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168) at com.kizoom.android.mybus.storage.MyStopsDatabase.getMyStops(MyStopsDatabase.java:63) at com.kizoom.mybus.test.MyStopsDatabaseTest.testGetMyStops(MyStopsDatabaseTest.java:24) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:191) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:181) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520) The following information appears in LogCat. 02-21 11:52:16.204: ERROR/Database(1454): sqlite3_open_v2("/data/data/com.kizoom.mybus.test/databases/MyStops", &handle, 6, NULL) failed 02-21 11:52:16.204: ERROR/SQLiteOpenHelper(1454): Couldn't open MyStops for writing (will try read-only): 02-21 11:52:16.204: ERROR/SQLiteOpenHelper(1454): android.database.sqlite.SQLiteException: unable to open database file 02-21 11:52:16.204: ERROR/SQLiteOpenHelper(1454): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 02-21 11:52:16.204: ERROR/SQLiteOpenHelper(1454): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1584) 02-21 11:52:16.204: ERROR/SQLiteOpenHelper(1454): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638) 

¿Alguien sabe por qué esto fallaría?

En lugar de usar getInstrumentation().getContext() para el contexto durante la creación del ayudante db, lo cambié a getInstrumentation().getTargetContext() y funciona.

Utilizo el siguiente setUp () – Método en mi TestDatabaseHelper * -TestCases:

 @Override protected void setUp() throws Exception { super.setUp(); final SQLiteDatabase db = SQLiteDatabase.create(null); Context context = new MockContext() { @Override public SQLiteDatabase openOrCreateDatabase(String file, int mode, SQLiteDatabase.CursorFactory factory) { return db; }; }; mHelper = new MyCustomSubclassOfDatabaseHelper(context); mDb = mHelper.getWritableDatabase(); wipeData(mDb); } public void wipeData(SQLiteDatabase db) { db.execSQL("DELETE FROM " + TABLENAME + ";"); } 

Es muy bueno porque la documentación dice acerca de SQLiteDatabase.create ():

Cree una base de datos SQLite con respaldo de memoria. Su contenido será destruido cuando la base de datos esté cerrada.

Por lo tanto, su base de datos de prueba no se persiste y puede probar fácilmente sus métodos personalizados de inserción / actualización / consulta / eliminación.

Espero que esto ayude. Si todavía le quedan preguntas, no dude en preguntar.

Saludos, Christoph

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.