測試資料庫並進行偵錯

使用 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 資料庫測試及偵錯,請參閱下列資源:

網誌文章

影片