Tester et déboguer votre base de données

Il est important de vérifier la stabilité de la base de données de votre application et des données de vos utilisateurs lorsque vous créez des bases de données à l'aide de la bibliothèque de persistance Room. 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

Deux options s'offrent à vous pour tester votre base de données :

  • Sur un appareil Android
  • Sur votre ordinateur de développement hôte (non recommandé)

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 Android

L'approche recommandée pour tester l'implémentation de votre base de données consiste à écrire un test JUnit exécuté sur un appareil Android. Comme ces tests ne nécessitent pas la création d'une activité, ils devraient être plus rapides à exécuter que les tests d'interface utilisateur.

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 :

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

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

Room utilise la bibliothèque SQLite Support, qui fournit des interfaces correspondant à celles des classes du framework Android. Cette correspondance vous permet de transmettre des implémentations personnalisées de la bibliothèque Support afin de tester vos requêtes de base de données.

Tester vos migrations

Room permet les migrations incrémentielles de base de données afin de préserver les données d'application existantes dans les cas où une mise à jour d'application modifierait le schéma de la base de données. Cependant, 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 rapidement les requêtes à partir de vos classes DAO.
  • Consultez immédiatement les informations en direct dans l'outil d'inspection de bases de données lorsque votre application en cours d'exécution apporte des modifications aux 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 documentation sur la ligne de commande sqlite3, 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