測試資料庫並進行偵錯

使用 Room 永久保存程式庫建立資料庫時,請務必驗證應用程式資料庫和使用者資料的穩定性。本頁說明如何測試資料庫,以及執行偵錯步驟,協助您通過測試。

測試資料庫

測試資料庫的方式有兩種:

  • 在執行 Android 的裝置上
  • 使用主機開發機器

如需瞭解資料庫遷移作業專屬測試,請參閱「遷移測試」一文。

在搭載 Android 的裝置上測試

如要測試資料庫的實作方式,建議您編寫在 Android 裝置上執行的 JUnit 測試。由於這類測試不需要活動,因此執行速度比 UI 測試更快。

設定測試時,請務必建立資料庫的記憶體內版本,讓測試更加封閉,如以下範例所示:

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 時,您可以使用本機 JVM JUnit 測試,在主機開發機器上執行資料庫測試。這項設定可消除 Android 模擬器或裝置的額外負荷,加快測試執行速度。

為確保一致性,請使用 BundledSQLiteDriver。這個驅動程式包含從來源編譯的 SQLite,與主體機器、Android 裝置和 iOS 裝置上使用的 SQLite 版本完全相同。使用這個驅動程式可避免版本不符的問題。

如要設定 JVM 測試,請在測試資料庫建構工具中設定 BundledSQLiteDriver

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

測試遷移作業

Room 支援資料庫逐步遷移作業,可在應用程式更新變更資料庫結構時,保留現有的應用程式資料。不過,如果遷移定義有誤,應用程式可能會停止運作。請務必測試 Room 資料庫遷移作業

對資料庫偵錯

您可以使用幾種工具和程序對資料庫偵錯。

使用資料庫檢查器

在 Android Studio 4.1 以上版本中,資料庫檢查器可讓您在應用程式執行期間檢查、查詢及修改應用程式的資料庫;資料庫檢查器與 Android 隨附的 SQLite 版本相容,並且包含可與 Room 搭配使用的特殊功能:

  • 使用溝槽操作從 DAO 類別執行查詢。
  • 當執行中的應用程式變更資料,您可以在資料庫檢查器中立即看到即時更新。

如要進一步瞭解資料庫檢查器,請參閱「使用資料庫檢查器對資料庫偵錯」。

透過指令列轉儲資料

Android SDK 提供可用來檢查應用程式資料庫的 sqlite3 資料庫工具,包括可用來列印資料表內容的 .dump 等指令,而 .schema 則可用來列印現有資料表的 SQL CREATE 陳述式。

您也可以透過指令列執行 SQLite 指令,如以下程式碼範例所示:

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

詳情請參閱 SQLite 網站的 sqlite3 指令列說明文件

其他資源

如要進一步瞭解如何對 Room 資料庫測試及偵錯,請參閱下列資源:

網誌文章

影片