使用 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 資料庫測試及偵錯,請參閱下列資源:
網誌文章
影片
- 資料庫檢查器 (11 週 Android 課程)