使用 Room 永久性程式庫建立資料庫時,請務必確認應用程式資料庫和使用者資料的穩定性。本頁面說明如何對資料庫進行測試與偵錯,協助開發人員完成測試。
測試資料庫
測試資料庫的方式有 2 種:
- 使用 Android 裝置:
- 使用主機開發機器上 (不建議)。
如需資料庫遷移作業特定的測試資訊,請參閱「遷移測試」(Testing Migrations) 一文。
使用 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 類別執行查詢。
- 如此一來在執行應用程式變更資料時,可立即用資料庫檢查器查看即時更新。
如要進一步瞭解資料庫檢查器,請參閱「使用資料庫檢查器進行資料庫偵錯」(Debug your database with the Database Inspector)。
以指令列傾印資料
Android SDK 提供 sqlite3
資料庫工具,可用於檢查應用程式的資料庫。其中包含 .dump
等指令可用來列印資料表的內容,而 .schema
則可用來列印現有資料表 SQL CREATE
的陳述式。
開發人員也可以透過指令列執行 SQLite 指令,詳情請參閱以下程式碼範例:
adb -s emulator-5554 shell sqlite3 /data/data/your-app-package/databases/rssitems.db
詳情請參閱 SQLite 網站提供的「sqlite3
指令列說明」文件 (sqlite3
command line documentation)。
其他資源
如要進一步瞭解如何對 Room 資料庫進行測試及偵錯,請參閱下列其他資源:
網誌文章
影片
- 資料庫檢查器 (11 Weeks of Android)