Wenn Sie Datenbanken mit der Room Persistence Library erstellen, müssen Sie die Stabilität der Anwendungsdatenbank und der Nutzerdaten prüfen. Auf dieser Seite wird erläutert, wie Sie Ihre Datenbank testen und Schritte zur Fehlerbehebung ausführen, damit Ihre Tests erfolgreich sind.
Datenbank testen
Es gibt zwei Möglichkeiten, Ihre Datenbank zu testen:
- Auf einem Android-Gerät:
- Auf dem Hostentwicklungscomputer (nicht empfohlen).
Informationen zu Tests für Datenbankmigrationen finden Sie unter Migrationen testen.
Auf einem Android-Gerät testen
Der empfohlene Ansatz zum Testen Ihrer Datenbankimplementierung besteht darin, einen JUnit-Test zu schreiben, der auf einem Android-Gerät ausgeführt wird. Da für diese Tests keine Aktivität erstellt werden muss, sollten sie schneller ausgeführt werden als Ihre UI-Tests.
Beim Einrichten von Tests sollten Sie eine speicherinterne Version Ihrer Datenbank erstellen, um die Tests hermetisch zu gestalten, wie im folgenden Beispiel gezeigt:
Kotlin
@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( context, TestDatabase::class.java).build() userDao = db.getUserDao() } @After @Throws(IOException::class) fun closeDb() { db.close() } @Test @Throws(Exception::class) fun writeUserAndReadInList() { val user: User = TestUtil.createUser(3).apply { setName("george") } userDao.insert(user) val byName = userDao.findUsersByName("george") assertThat(byName.get(0), equalTo(user)) } }
Java
@RunWith(AndroidJUnit4.class) public class SimpleEntityReadWriteTest { private UserDao userDao; private TestDatabase db; @Before public void createDb() { Context context = ApplicationProvider.getApplicationContext(); db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build(); userDao = db.getUserDao(); } @After public void closeDb() throws IOException { db.close(); } @Test public void writeUserAndReadInList() throws Exception { User user = TestUtil.createUser(3); user.setName("george"); userDao.insert(user); List<User> byName = userDao.findUsersByName("george"); assertThat(byName.get(0), equalTo(user)); } }
Auf Hostcomputer testen
Room verwendet die SQLite-Supportbibliothek, die Schnittstellen zur Verfügung stellt, die denen in den Android Framework-Klassen entsprechen. Mit dieser Unterstützung können Sie benutzerdefinierte Implementierungen der Supportbibliothek übergeben, um Ihre Datenbankabfragen zu testen.
Migrationen testen
Room unterstützt inkrementelle Datenbankmigrationen, um vorhandene Anwendungsdaten in Situationen beizubehalten, in denen ein Anwendungsupdate das Datenbankschema ändert. Eine falsch definierte Migration kann jedoch dazu führen, dass Ihre App abstürzt. Sie sollten die Migration Ihrer Raumdatenbanken testen.
Datenbankfehler 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 Ihre App ausgeführt wird. Der Datenbank-Inspector ist mit der SQLite-Version kompatibel, die in Android gebündelt ist und spezielle Funktionen für die Verwendung mit Room enthält:
- Mit Gutter-Aktionen lassen sich Abfragen aus Ihren DAO-Klassen schnell ausführen.
- Wenn die ausgeführte Anwendung Änderungen an den Daten vornimmt, werden Ihnen im Database Inspector sofort Live-Updates angezeigt.
Weitere Informationen zum Database Inspector finden Sie unter Datenbank mit dem Database Inspector debuggen und Fehler beheben.
Daten über die Befehlszeile sichern
Das Android SDK enthält ein sqlite3
-Datenbanktool zum Untersuchen der Datenbanken Ihrer App. Sie enthält Befehle wie .dump
, um den Inhalt einer Tabelle auszugeben, und .schema
, um die Anweisung SQL CREATE
für eine vorhandene Tabelle auszugeben.
Sie können SQLite-Befehle auch ü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 Dokumentation zur sqlite3
-Befehlszeile, die auf der SQLite-Website verfügbar ist.
Weitere Informationen
Weitere Informationen zum Testen und Debuggen Ihrer Raumdatenbank finden Sie in den folgenden zusätzlichen Ressourcen:
Blogposts
Videos
- Database Inspector (11 Wochen Android)