Datenbank testen und Fehler beheben

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