Тестируйте и отлаживайте свою базу данных

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

Проверьте свою базу данных.

Существует два способа протестировать вашу базу данных:

  • На устройстве под управлением Android.
  • На вашей рабочей машине для разработки.

Информацию о тестировании, специфичном для миграции баз данных, см. в разделе «Тестирование миграций» .

Протестируйте на устройстве под управлением Android.

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

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

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, ознакомьтесь со следующими дополнительными ресурсами:

Сообщения в блоге

Видео