在使用 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 数据库的更多信息,请参阅以下其他资源
博客文章
视频
- 数据库检查器 (11 Weeks of Android)