Testa ed esegui il debug del tuo database

È importante verificare la stabilità del database dell'app e dei dati degli utenti durante la creazione dei database utilizzando la libreria di persistenza della stanza. In questa pagina viene spiegato come testare il database ed eseguire passaggi di debug per superare i test.

Testa il database

Esistono due modi per testare il database:

  • Su un dispositivo Android.
  • Sulla macchina di sviluppo host (opzione sconsigliata).

Per informazioni sui test specifici per le migrazioni dei database, consulta Test delle migrazioni.

Esegui il test su un dispositivo Android

L'approccio consigliato per testare l'implementazione del database è scrivere un test JUnit eseguito su un dispositivo Android. Poiché questi test non richiedono la creazione di un'attività, dovrebbero essere più rapidi da eseguire rispetto ai 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:

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

Esegui il test sul computer host

Room utilizza la SQLite Support Library, che fornisce le interfacce corrispondenti a quelle delle classi Framework Android. Questo tipo di assistenza ti consente di passare implementazioni personalizzate della libreria di assistenza per testare le query sul database.

Testare le migrazioni

La stanza virtuale supporta le migrazioni incrementali dei database per conservare i dati delle app esistenti nei casi in cui l'aggiornamento di un'app modifichi 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 della stanza.

Esegui il debug del tuo database

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

Utilizzare Database Inspector

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

  • Utilizza le azioni grotter per eseguire rapidamente query dalle tue classi DAO.
  • Visualizza immediatamente gli aggiornamenti in tempo reale in Database Inspector quando l'app in esecuzione apporta modifiche ai dati.

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

Esegui il dump dei dati dalla riga di comando

L'SDK Android include uno strumento di database sqlite3 per esaminare i database dell'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 i 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 documentazione della riga di comando sqlite3, disponibile sul sito web SQLite.

Risorse aggiuntive

Per scoprire di più sulla verifica e sul debug del database delle stanze, consulta le seguenti risorse aggiuntive:

Post del blog

Video