Datenbank testen und Fehler beheben

Wenn Sie Datenbanken mit der Room-Persistenzbibliothek erstellen, sollten Sie die Stabilität der Datenbank Ihrer App und die Daten Ihrer Nutzer überprüfen. Auf dieser Seite wird beschrieben, wie Sie Ihre Datenbank testen und Debugging-Schritte ausführen können, damit Ihre Tests erfolgreich sind.

Datenbank testen

Es gibt zwei Möglichkeiten, Ihre Datenbank zu testen:

  • Auf einem Gerät mit Android
  • Auf Ihrer Host-Entwicklungsmaschine

Informationen zu Tests, die speziell für Datenbankmigrationen gelten, finden Sie unter Migrationen testen.

Auf einem Gerät mit Android testen

Um Ihre Datenbankimplementierung zu testen, empfehlen wir, einen JUnit-Test zu schreiben, der auf einem Gerät mit Android ausgeführt wird. Da für diese Tests keine Aktivität erforderlich ist, werden sie schneller als UI-Tests ausgeführt.

Beim Einrichten Ihrer Tests sollten Sie eine In-Memory-Version Ihrer Datenbank erstellen, um die Tests hermetischer zu gestalten. Ein Beispiel finden Sie unten:

import kotlinx.coroutines.test.runTest

@RunWith(AndroidJUnit4::class)
class SimpleEntityReadWriteTest {
    private lateinit var userDao: UserDao
    private lateinit var db: TestDatabase

    @Before
    fun createDb() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        db = Room.inMemoryDatabaseBuilder<TestDatabase>(context)
                .setDriver(BundledSQLiteDriver())
                .build()
        userDao = db.userDao()
    }

    @After
    fun closeDb() {
        db.close()
    }

    @Test
    fun writeUserAndReadInList() = runTest {
        val user = User(3, "george")
        userDao.insert(user)
        val byName = userDao.findUsersByName("george")
        assertEquals(byName.single(), user)
    }
}

Auf Ihrem Hostcomputer (JVM) testen

Mit Room KMP können Sie Datenbanktests auf Ihrer Host-Entwicklungsmaschine mit lokalen JVM-JUnit-Tests ausführen. Mit dieser Einrichtung werden Ihre Tests schneller ausgeführt, da der Aufwand für einen Android-Emulator oder ein Android-Gerät entfällt.

Verwenden Sie BundledSQLiteDriver, um die Konsistenz zu gewährleisten. Dieser Treiber enthält aus der Quelle kompiliertes SQLite, das auf Ihrem Hostcomputer, Android-Geräten und iOS-Geräten genau dieselbe Version von SQLite verwendet. So lassen sich Probleme mit Versionsunterschieden vermeiden.

Konfigurieren Sie den BundledSQLiteDriver in Ihrem Testdatenbank-Builder, um JVM-Tests einzurichten:

val db = Room.inMemoryDatabaseBuilder<TestDatabase>()
    .setDriver(BundledSQLiteDriver())
    .build()

Migrationen testen

Room unterstützt inkrementelle Datenbankmigrationen, um vorhandene App-Daten beizubehalten , wenn durch ein App-Update das Datenbankschema geändert wird. Eine falsch definierte Migration kann jedoch zum Absturz Ihrer App führen. Stellen Sie sicher, dass Sie Ihre Room-Datenbankmigrationen testen.

Fehler in der Datenbank beheben

Es gibt verschiedene Tools und Prozesse, mit denen Sie Fehler in Ihrer Datenbank beheben können.

Database Inspector verwenden

In Android Studio 4.1 und höher können Sie mit dem Database Inspector die Datenbanken Ihrer App prüfen, abfragen und ändern, während die App ausgeführt wird. Der Database Inspector ist mit der Version von SQLite kompatibel, die in Android enthalten ist, und bietet spezielle Funktionen für die Verwendung mit Room:

  • Mit den Aktionen in der Randleiste können Sie Abfragen aus Ihren DAO-Klassen ausführen.
  • Wenn Ihre ausgeführte App Änderungen an den Daten vornimmt, können Sie im Database Inspector sofort Live-Updates sehen.

Weitere Informationen zum Database Inspector finden Sie unter Fehler in der Datenbank mit dem Database Inspector beheben.

Daten über die Befehlszeile ausgeben

Das Android SDK enthält das Datenbanktool sqlite3, mit dem Sie die Datenbanken Ihrer App untersuchen können. Es enthält Befehle wie .dump, um den Inhalt einer Tabelle auszugeben, und .schema, um die SQL CREATE-Anweisung für eine vorhandene Tabelle auszugeben.

Sie können auch SQLite-Befehle über die Befehlszeile ausführen, wie im folgenden Snippet gezeigt:

adb -s emulator-5554 shell sqlite3
/data/data/your-app-package/databases/rssitems.db

Weitere Informationen finden Sie in der sqlite3 Befehlszeilendokumentation auf der SQLite Website.

Zusätzliche Ressourcen

Weitere Informationen zum Testen und Debuggen Ihrer Room-Datenbank finden Sie in den folgenden zusätzlichen Ressourcen:

Blog posts

Videos