一、前言

在使用 Room 数据库时,务必需要验证数据库和用户数据的稳定性。尤其是在数据库迁移过程中,必须进行进行充分的测试,保证数据库按预定完成迁移。使用单元测试来完成这些测试,无需创建Activity, 执行速度也比界面测试速度快,可以大大提高效率。另外,在应用功能界面进行测试数据库,也并不能完全覆盖所有用例,所以使用单元测试也更加全面测试。

二、使用单元测试测试 Room 数据库

使用单元测试来测试 Room 数据库,需要编写 Android 设备上运行的 JUnit 测试单元。编写测试单元跟代码中调用数据库进行测试一样,只不过单元测测试无需创建 Activity,因此执行速度更快,通过编写完善的测试单元,完成更加全面的测试。如下示例所示:

@RunWith(AndroidJUnit4::class)
class RoomDBTest {lateinit var userDao: UserDaolateinit var studentDao: StudentDaolateinit var appDB: AppDatabase@Beforefun createDatabase() {val appContext = InstrumentationRegistry.getInstrumentation().targetContextappDB = Room.databaseBuilder(appContext, AppDatabase::class.java, "app.db").build()userDao = appDB.userDao()studentDao = appDB.studentDao()}@After@Throws(IOException::class)fun closeDB() {appDB?.close()}@Testfun insertUsers() {runBlocking {userDao.insertAll(User(1, "Student1", 18),User(2, "Student2", 18),User(3, "Student3", 17),User(4, "Student4", 19))}}@Testfun findAllUsers() {runBlocking {userDao.getAll().forEach {println("User { userId = ${it.userId}, name = ${it.name}, age = ${it.age}}")}}}@Testfun findAllStudentsWithSchool() {runBlocking {studentDao.getStudentWithSchool().forEach{println("Item {studentId = ${it.sid}, studentName = ${it.name}, studentAge = ${it.age}, schoolId = ${it.schoolId}, schoolName = ${it.schoolName}")}}}}

注意事项:测试 Room 数据库必须编写 Android 设备上运行的 JUnit 测试单元(使用 @RunWith(AndroidJUnit4::class)标注测试类)

讲解:
上面的例子中,@Befor 是在 @Test 之前执行的,可以用来初始化数据库实例、DAO 对象等等;@After 是在 @Test 之后执行的,可用来回收资源等等;@Test 中编写测试单元代码。

使用单元测试测试您的 Room 数据库相关推荐

  1. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  2. 单元测试编写_为什么要编写单元测试-测试技巧8

    单元测试编写 我对最近的博客"您应该测试什么"有很多React,有些人出于各种原因与我达成一致,另一些人则认为建议某些类可能不需要单元测试是完全危险的. 已经处理了什么测试,今天的 ...

  3. 为什么要编写单元测试–测试技巧8

    我对最近在"您应该测试什么"上的博客有很多反应,有些人出于各种原因同意我的想法,另一些人则认为建议某些类可能不需要单元测试是非常危险的. 已经处理了什么测试,今天的博客涉及为什么要 ...

  4. 使用模拟的单元测试–测试技术5

    我的最后一个博客是有关测试代码方法的一系列博客中的第四篇,演示了如何创建使用存根对象隔离测试对象的单元测试. 今天的博客探讨了有时被视为对立的技术:使用模拟对象进行单元测试. 同样,我使用了从数据库检 ...

  5. laravel进行单元测试的时候如何模拟数据库以及mockery的调用

    单元测试是独立的,所谓的独立是指有独立的运行容器,独立的数据库. 这样做有什么好处呢? (1). 不会跟正常的容器产生冲突,继而影响正常业务. (2). 数据库独立防止数据被修改影响单元测试结果. 这 ...

  6. 用 JMeter 测量性能--测试您的 DB2 数据库

    为什么80%的码农都做不了架构师?>>>    级别: 初级 Kulvir Singh Bhogal, IBM 电子商务顾问, Austin, TX 2004 年 11 月 01 日 ...

  7. junit测试找不到数据库_将数据库日志添加到JUnit3

    junit测试找不到数据库 在过去的十年中,我们已经编写了成千上万的JUnit3测试,现在正尝试将结果合并到数据库中,而不是分散的日志文件中. 事实证明,扩展TestCase类非常容易做到这一点. 注 ...

  8. Python 测试驱动开发读书笔记(三)使用单元测试测试简单的首页

    使用单元测试测试简单的首页 在上一章结尾,我们有一个简单的测试例子,但是这个例子执行是失败的 失败的原因是浏览器的首页标题不是To-Do,从这章开始编写这个应用 第一个Django应用,第一个单元测试 ...

  9. 如何测试网站服务器mysql数据库连接,如何测试网站服务器mysql数据库

    如何测试网站服务器mysql数据库 内容精选 换一换 您可根据业务需要,参考下载全量备份文件,并通过备份文件进行本地存储备份或者恢复数据.备份文件不支持恢复到本地为Windows操作系统的数据库.由于 ...

  10. php pdo 与对比mysql,php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例...

    php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例 本文实例讲述了php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率.分享给大家供大家参考,具体如下: ...

最新文章

  1. JDK8:使用Optional进行变量判空、集合遍历
  2. 万万没想到 I 这 7 件超酷的事情,让开发更有效率
  3. 搜索引擎技术——全文检索基础原理
  4. 基于ANN的6种调制信号自动调制识别(2ASK、4ASK、2FSK、4FSK、2PSK、4PSK)
  5. 作业收缴系统使用手册(自写开源小系统)
  6. ieda 远程调试hive_idea 远程调试
  7. elemet UI 中表格数据的排序操作
  8. 为什么跨境电商独立站将成为几年的焦点?
  9. mybatis按datetime条件查询,参数为时间戳时
  10. Golang入门~搭建Beego
  11. python3-day4(re正则表达式,冒泡)
  12. 解决yolo+cudnn+opencv+gpu的一些问题
  13. Tomcat爆出严重漏洞,影响所有版本,波及约8万台服务器,附解决方案!(扩散!!!)...
  14. 12. Django基础:模型层及ORM
  15. y电容如何选型_到底什么是安规电容?有什么作用?一文彻底请明白
  16. SD卡无法格式化怎么办的解决方法
  17. juk互粉攻略set结构体
  18. 图扑案例合集丨用赛博朋克语言诠释数字孪生
  19. category 详解
  20. 快速入门基于区块链的BPM系统--汇流BPM

热门文章

  1. pandas 取某一列数据的几种形式比较
  2. 计算机视觉与深度学习(8)
  3. octet-stream文件怎么看
  4. 超级小白的AOP之Springboot 日志工程
  5. jvm调优转载自http://www.cnblogs.com/xingzc/p/5756119.html
  6. python高次方程求根公式,Python简单求解高阶方程的数值解
  7. 小米手机多功能计算机都怎么使用方法,图文展示小米手机如何连接电脑详细操作...
  8. git将项目提交到本地创库
  9. 回头看一看我的2019年
  10. 函数连续的概念与性质(包括强制函数)