测试和调试数据库

在使用 Room 持久性库 创建数据库时,验证应用数据库和用户数据的稳定性非常重要。此页面讨论如何测试数据库以及执行调试步骤以帮助测试通过。

测试您的数据库

有两种方法可以测试您的数据库

  • 在 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

有关更多信息,请参阅 sqlite3 命令行文档,该文档可在 SQLite 网站上获得。

其他资源

要了解有关测试和调试 Room 数据库的更多信息,请参阅以下其他资源

博客文章

视频