Как тестировать и отлаживать базу данных

При создании баз данных с помощью библиотеки Room Persistence необходимо проверить стабильность базы данных приложения и данных пользователей. На этой странице рассказывается, как протестировать базу данных и выполнить отладку, чтобы тесты прошли успешно.

Тестирование базы данных

Проверить базу данных можно двумя способами:

  • На устройстве Android
  • На компьютере разработчика

Информацию о тестировании, относящемся к переносу баз данных, можно найти в статье Тестирование переноса.

Тестирование на устройстве Android

Чтобы протестировать реализацию базы данных, рекомендуем написать тест JUnit, который будет выполняться на устройстве с Android. Поскольку для этих тестов не требуется активность, они выполняются быстрее, чем тесты интерфейса.

При настройке тестов следует создать версию базы данных в памяти, чтобы сделать тесты более герметичными, как показано в следующем примере:

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

Тестирование на хост-компьютере (JVM)

С помощью Room KMP можно запускать тесты баз данных на хост-машине разработчика, используя локальные тесты JUnit JVM. Это позволяет ускорить тестирование, поскольку не нужно использовать эмулятор Android или устройство.

Чтобы обеспечить единообразие, используйте BundledSQLiteDriver. Этот драйвер включает SQLite, скомпилированный из исходного кода, который использует ту же версию SQLite, что и на вашем хост-компьютере, устройствах Android и iOS. Использование этого драйвера позволяет избежать проблем с несовместимостью версий.

Чтобы настроить тесты JVM, задайте конфигурацию BundledSQLiteDriver в конструкторе базы данных для тестирования:

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

Как протестировать перенос

Room поддерживает инкрементный перенос базы данных, чтобы сохранить существующие данные приложения, если обновление приложения меняет схему базы данных. Однако неправильно заданный перенос может привести к сбою приложения. Обязательно проверьте перенос данных из базы данных Room.

Отладка базы данных

Для отладки базы данных можно использовать различные инструменты и процессы.

Как использовать инспектор баз данных

В Android Studio 4.1 и более поздних версиях Инспектор баз данных позволяет проверять, запрашивать и изменять базы данных приложения во время его работы. Инспектор баз данных совместим с версией SQLite, которая поставляется вместе с Android, и включает специальные функции для использования с Room:

  • Используйте действия на полях, чтобы выполнять запросы из классов DAO.
  • Когда запущенное приложение изменяет данные, вы сразу видите обновления в инспекторе базы данных.

Подробнее об инспекторе баз данных…

Как экспортировать данные из командной строки

Android SDK включает sqlite3 инструмент для работы с базами данных, который позволяет просматривать базы данных приложения. Она включает такие команды, как .dump для печати содержимого таблицы и .schema для печати оператора SQL CREATE для существующей таблицы.

Вы также можете выполнять команды SQLite из командной строки, как показано в следующем фрагменте:

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

Дополнительную информацию можно найти в документации по командной строке sqlite3 на сайте SQLite.

Дополнительные ресурсы

Чтобы узнать больше о тестировании и отладке базы данных Room, ознакомьтесь со следующими дополнительными ресурсами:

Записи в блоге

Видео