使用 Room 永久性程式庫建立資料庫時,請務必驗證應用程式資料庫和使用者資料的穩定性。本頁會說明如何對資料庫進行測試與偵錯,協助您完成測試。
測試資料庫
測試資料庫的方式有 2 種:
- 使用 Android 裝置。
- 使用主機開發機器 (不建議)。
如需瞭解資料庫遷移作業專屬測試,請參閱「遷移測試」一文。
在 Android 裝置測試
如要測試資料庫的實作方式,建議您編寫在 Android 裝置執行的 JUnit 測試。由於這類測試不需建立活動,執行速度應該比 UI 測試更快。
設定測試時,請務必建立資料庫的記憶體內版本,讓測試更加封閉,如以下範例所示:
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)); } }
在主體機器上測試
Room 使用 SQLite 支援資料庫,提供與 Android Framework 類別相對應的介面。這項支援服務可讓您傳遞支援資料庫的自訂實作方式,用來測試資料庫查詢。
測試遷移作業
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 課程)