Tester et déboguer votre base de données

Lorsque vous créez des bases de données à l'aide de la bibliothèque de persistance Room, vous devez vérifier la stabilité de la base de données de votre application et des données de vos utilisateurs. Cette page explique comment tester votre base de données et comment effectuer les étapes de débogage qui vous aideront à réussir vos tests.

Tester votre base de données

Vous pouvez tester votre base de données de deux manières :

  • Sur un appareil équipé d'Android
  • Sur votre ordinateur de développement hôte

Pour en savoir plus sur les tests spécifiques aux migrations de bases de données, consultez la section Tester les migrations.

Tester votre base de données sur un appareil équipé d'Android

Pour tester l'implémentation de votre base de données, nous vous recommandons d'écrire un test JUnit exécuté sur un appareil équipé d'Android. Comme ces tests ne nécessitent pas d'activité, ils s'exécutent plus rapidement que les tests d'UI.

Lorsque vous configurez vos tests, vous devez créer une version en mémoire de votre base de données afin de les rendre plus hermétiques, comme illustré dans l'exemple suivant :

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

Tester votre base de données sur la machine hôte (JVM)

Avec Room KMP, vous pouvez exécuter des tests de base de données sur votre ordinateur de développement hôte à l'aide de tests JUnit JVM locaux. Cette configuration permet à vos tests de s'exécuter plus rapidement en éliminant la surcharge d'un émulateur ou d'un appareil Android.

Pour assurer la cohérence, utilisez BundledSQLiteDriver. Ce pilote inclut SQLite compilé à partir de la source, qui utilise exactement la même version de SQLite sur votre machine hôte, vos appareils Android et vos appareils iOS. L'utilisation de ce pilote élimine les problèmes d'incompatibilité de version.

Pour configurer les tests JVM, configurez BundledSQLiteDriver dans le compilateur de votre base de données de test :

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

Tester vos migrations

Room permet les migrations incrémentielles de base de données afin de préserver les données de l'application existantes dans les cas où une mise à jour d'application modifierait le schéma de la base de données. Toutefois, une migration mal définie peut entraîner le plantage de votre application. Assurez-vous de tester les migrations de votre base de données Room.

Déboguer votre base de données

Plusieurs outils et processus vous permettent de déboguer votre base de données.

Utiliser l'outil d'inspection de bases de données

Dans Android Studio 4.1 et versions ultérieures, l'outil d'inspection de bases de données vous permet d'inspecter, d'interroger et de modifier les bases de données de votre application pendant son exécution. L'outil d'inspection de bases de données est compatible avec la version de SQLite fournie avec Android et inclut des fonctionnalités spéciales à utiliser avec Room :

  • Utilisez des actions de marge pour exécuter des requêtes à partir de vos classes DAO.
  • Lorsque votre application en cours d'exécution apporte des modifications aux données, vous pouvez immédiatement consulter les informations en direct dans l'outil d'inspection de bases de données.

Pour en savoir plus sur l'outil d'inspection de bases de données, consultez la page Déboguer votre base de données à l'aide de l'outil d'inspection de bases de données.

Vider les données depuis la ligne de commande

Le SDK Android inclut un outil de base de données sqlite3 permettant d'examiner les bases de données de votre application. Il inclut des commandes telles que .dump pour afficher le contenu d'une table, et .schema pour imprimer l'instruction SQL CREATE d'une table existante.

Vous pouvez également exécuter des commandes SQLite à partir de la ligne de commande, comme indiqué dans l'extrait de code suivant :

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

Pour en savoir plus, consultez la sqlite3 documentation sur la ligne de commande, disponible sur le site Web SQLite.

Ressources supplémentaires

Pour en savoir plus sur les tests et le débogage de votre base de données Room, consultez les ressources supplémentaires suivantes :

Articles de blog

Vidéos