對資料庫進行測試與偵錯

Stay organized with collections Save and categorize content based on your preferences.

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

網誌文章

影片