Testa ed esegui il debug del tuo database

Quando crei database utilizzando la libreria di persistenza Room, devi verificare la stabilità del database della tua app e dei dati dei tuoi utenti. Questa pagina descrive come testare il database ed eseguire passaggi di debug per aiutarti a superare i test.

Testare il database

Esistono due modi per testare il database:

  • Su un dispositivo che esegue Android
  • Sul computer di sviluppo host

Per informazioni sui test specifici per le migrazioni di database, vedi Testare le migrazioni.

Testare su un dispositivo che esegue Android

Per testare l'implementazione del database, ti consigliamo di scrivere un test JUnit che venga eseguito su un dispositivo che esegue Android. Poiché questi test non richiedono un'attività, vengono eseguiti più velocemente dei test dell'interfaccia utente.

Quando configuri i test, devi creare una versione in memoria del database per renderli più ermetici, come mostrato nell'esempio seguente:

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)
    }
}

Testare sulla macchina host (JVM)

Con Room KMP, puoi eseguire test del database sul computer di sviluppo host utilizzando i test JUnit JVM locali. Questa configurazione consente di eseguire i test più velocemente eliminando l'overhead di un emulatore o di un dispositivo Android.

Per mantenere la coerenza, utilizza BundledSQLiteDriver. Questo driver include SQLite compilato dall'origine, che utilizza la stessa versione di SQLite sulla macchina host, sui dispositivi Android e sui dispositivi iOS. L'utilizzo di questo driver elimina i problemi di mancata corrispondenza della versione.

Per configurare i test JVM, configura BundledSQLiteDriver nel builder del database di test:

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

Testare le migrazioni

Room supporta le migrazioni incrementali del database per conservare i dati delle app esistenti nelle situazioni in cui un aggiornamento dell'app modifica lo schema del database. Tuttavia, una migrazione definita in modo errato potrebbe causare l'arresto anomalo dell'app. Assicurati di testare le migrazioni del database Room.

Eseguire il debug del database

Esistono diversi strumenti e processi che puoi utilizzare per eseguire il debug del database.

Utilizzare Database Inspector

In Android Studio 4.1 e versioni successive, Database Inspector ti consente di esaminare, eseguire query e modificare i database della tua app mentre l'app è in esecuzione. Database Inspector è compatibile con la versione di SQLite inclusa in Android e include funzionalità speciali per l'utilizzo con Room:

  • Utilizza le azioni della barra laterale per eseguire query dalle tue classi DAO.
  • Quando l'app in esecuzione apporta modifiche ai dati, puoi visualizzare immediatamente gli aggiornamenti live in Database Inspector.

Per ulteriori informazioni su Database Inspector, vedi Eseguire il debug del database con Database Inspector.

Eseguire il dump dei dati dalla riga di comando

L'SDK Android include uno strumento di database sqlite3 per esaminare i database della tua app. Include comandi come .dump per stampare i contenuti di una tabella e .schema per stampare l'istruzione SQL CREATE per una tabella esistente.

Puoi anche eseguire comandi SQLite dalla riga di comando, come mostrato nel seguente snippet:

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

Per ulteriori informazioni, consulta la sqlite3 documentazione della riga di comando, disponibile sul sito web di SQLite.

Risorse aggiuntive

Per saperne di più su come testare ed eseguire il debug del database Room, consulta le seguenti risorse aggiuntive:

Post del blog

Video