Room官方文档(翻译)6.测试数据库

827 阅读2分钟

使用Room创建数据库时,验证 app 数据库和用户数据的稳定性很重要。 有两种方式检验你的数据库

  • 真机
  • 开发主机(不建议)

关于数据库迁移测试请参看Testing Migrations.

Note:当在你的 app 上运行测试时,Room允许你 mock DAO类的实例。这样的话,除非是为了测试数据库本身,就无需创建完整的数据库对象。 之所以可以使用此功能,是因为您的DAO不会泄漏数据库的任何详细信息。

在 Android 设备上测试

建议你在 Android 设备上编写 Junit 测试数据库。因为这些测试不需要创建 Activity ,所以它们执行速度应该比 UI 测试快。

设置测试时,应该构建一个内存版本的数据库,以使数据库测试更加封闭.

@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))
    }
}

在主机上测试

Room使用SQLite支持库,该库提供与Android Framework类中的接口匹配的接口。 此支持使您可以传递支持库的自定义实现,以测试数据库查询。

Note:虽然这种设置可以是测试快速的运行,但是并不建议这么做。因为你的设备上运行的SQLite版本可能与主机上的版本不匹配


Room官方文档(翻译)0.概览

Room官方文档(翻译)1.使用Room实体定义数据

Room官方文档(翻译)2.定义对象间的关系

Room官方文档(翻译)3.在数据库中创建视图

Room官方文档(翻译)4.使用Room DAOs访问数据

Room官方文档(翻译)5.迁移数据库

Room官方文档(翻译)6.测试数据库

Room官方文档(翻译)7.使用Room引用复杂数据