一、概述:
使用AndroidTest,我们可以获取到Android运行的环境,并且通过在测试文件中实例化我们需要测试的类,然后自己模拟一些参数去调用实例中的方法,来达到测试代码的目的。一个AndroidTest文件,就相当于一个运行进程一样,可以在真机上运行,并且可以把测试跑后的结果统计出来,作为研发自测重要的一个根据。

二、创建测试单元
我们可以针对我们代码中那些很关键的控制性类创建一个测试单元,这样创建的测试单元就可以包含很多内容。创建的方式也很简单,在需要创建的类边上进入提示,如下:

点击Create Test

在这个界面可以勾选需要测试的方法,这些都是public方法,否侧是测试不了的。
勾选完成点击OK,就会在androidTest的相同目录层级下创建一个对应的测试类。类似这样:

以上的每个方法都会被测试框架执行到,可以整个测试单元一起运行测试,也可以测试单个方法。

三、实现测试单元
我们实现测试单元的主要思想,就是要把我们项目中的代码尽量多地执行到,主要手段就是实例化我们需要测试的类,并且调用实例对象里的方法,来执行代码。如下:

这里就创建了实例对象,而且还调用了初始化的方法,这样我们就可以测试到我们这个类的构造方法以及对应的初始化的方法了。
如果需要传入参数,那么我们就自己创建一个或者一组参数,去调用方法,如下:

这里我是模拟回调监听得到数据后处理的方法,是一组参数,可以覆盖更多的switch分支。

四、运行调试
运行测试单元之后,AS控制台就会显示运行测试的结果,如下:

显示7个方法都通过测试运行,如果测试有问题,这里也会打印提示,逐个修改即可。

五、输出覆盖率报告
这一步骤相对比较麻烦,可以分为以下几个小步骤实现:

1.新建一个coverage.gradle文件,并且把这个文件放在项目的根目录下

coverage.gradle的内容如下:

apply plugin: 'jacoco'def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*','**/*_Factory.**/**', '**/Dagger**.**','**/*_Factory.InstanceHolder/**', '**/**Module_Provides**.InstanceHolder/**','**/**Module_Provides**.**/**','**/**_MembersInjector**.class','**/**Bean.class','**/**DataPack.class','**/**Pack.class','**/di/**','**/**Fragment**.*','**/**Activity**.*','**/**ViewHolder**.*','**/**Adapter**.*','**/**View.*','**/**Layout**.*','**/**LayoutManager**.*','**/**Widget**.*','**/**Dialog**.*','**/**UriMedia.*','**/**_Impl**.*','**/views/**','**/widgets/**',
]task jacocoTestReport(type: JacocoReport, dependsOn: ['connectedDebugAndroidTest', 'createDebugCoverageReport','testDebugUnitTest']) {reports {xml.enabled = truehtml.enabled = truecsv.enabled = true}def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug", excludes: fileFilter)def mainSrc = "${project.projectDir}/src/main/java"sourceDirectories.from = files([mainSrc])classDirectories.from = files([debugTree])executionData.from = fileTree(dir: "$buildDir", includes: ["jacoco/testPlayDebugUnitTest.exec","outputs/code_coverage/debugAndroidTest/connected/*coverage.ec"])
}/*** 直接生成报告,适用于单独跑完测试后,基于现有数据生成测试报告* 如:*  ./gradlew presentation:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.lixiang.neteasemusic.features.player.vm.FullScreenLyricViewModelTest#dispatchLyricFullScreenStateLock &&  ./gradlew presentation:jacocoTestReportDirect*/
task jacocoTestReportDirect(type: JacocoReport) {reports {xml.enabled = truehtml.enabled = truecsv.enabled = true}def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug", excludes: fileFilter)def mainSrc = "${project.projectDir}/src/main/java"sourceDirectories.from = files([mainSrc])classDirectories.from = files([debugTree])executionData.from = fileTree(dir: "$buildDir", includes: ["jacoco/testPlayDebugUnitTest.exec","outputs/code_coverage/debugAndroidTest/connected/*coverage.ec"])
}

2.在总项目的build.gradle中加入相关配置,如下:

3.在测试的module目录中的build.gradle文件中,引用测试相关的库文件,如下:

当然了,我们还要把覆盖率的开关打开:

4.最后最关键的一步,就是通过命令生成覆盖报告文件。在AS控制台中,默认就是在本项目的文件夹下,输入如下命令:

./gradlew app:jacocoTestReport

这里的app可以换成你自己想要测试的module的名字。
运行完成之后,就会在build目录下生成一个reports文件夹,然后看jacoco -> jacocoTestReport,这里面就可以看到相关的测试报告了。选择html的测试报告打开,如下:

这样就清清楚楚了,点进每一项里面,还可以查看更加详细的覆盖情况,很是直观便捷!

Android单元测试总结相关推荐

  1. 太白---落燕纷飞第一重 Android单元測试Instrumentation和irobotium

    PS:叫太白---落燕纷飞纯粹好玩(天涯明月游戏画面感,打击感,碰撞尽管做的不尽人意,可是太白这个职业还是不错,用作开头,,做个旁白而已). 这里的单元測试不管是instrumentation还是ir ...

  2. Android单元测试之Local unit tests(上)

    Android单元测试之Local unit tests(上) 简介 本地单元测试 JUnit 4 添加依赖 测试例子 结论 Mockito 添加依赖 测试例子-mock基本使用 测试例子-mock与 ...

  3. Android 单元测试之Mockito

    在博客Android 单元测试之JUnit4中,我们简单地介绍了:什么是单元测试,为什么要用单元测试,并展示了一个简单的单元测试例子.在文章中,我们只是展示了对有返回类型的目标public方法进行了单 ...

  4. Android 单元测试之Robolectric

    前言 在博客Android 单元测试之PowerMockito,主要介绍PowerMockito的使用和对Java测试用例的强大支持.但对于Android app开发来说,写起单元测试很痛苦:一方面单 ...

  5. Android 单元测试之UI测试

    Android 单元测试之UI测试 UI测试 Espresso 官网地址 Espresso是Google官方的一个针对Android UI测试的库,可以自动化的进行UI测试. Espresso可以验证 ...

  6. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  7. java单元测试总结

    java单元测试(使用junit) http://www.cnblogs.com/feiweiwei/archive/2009/06/16/1024623.html     JUnit是由 Erich ...

  8. Android CTS 测试总结【转】

    最近一直在做Android兼容性测试,根据Android官网给出的android-cts-manual 配置好了device后,开始测试. 首先配置软件环境: 1.下载Android-2.1系统,并编 ...

  9. Android 应用测试总结

    前提 所有的功能分支已完成 启动: 1. 启动入口:桌面正常启动,最近运行启动,所有程序列表中启动,锁屏快捷启动 2. 其他入口:从其他程序开启应用,从外部以文件形式打开应用(如果有) 3. 退回:从 ...

最新文章

  1. 拖拽公式图片、一键转换LaTex公式,这款开源公式识别神器比Mathpix Snip更适合你...
  2. 第1条:考虑用静态工厂方法代替构造器
  3. Boost:宏BOOST_TEST_CSTR_EQ的使用实例
  4. MyBatis与Hibernate比较
  5. ie的严苛,firefox的宽容
  6. 学习opencv3_如何高效学习计算机视觉?
  7. zookeepe安装配置_Zookeeper安装配置及简单使用
  8. 打不开网页但QQ能上网的解决办法
  9. 理论到实践带你了解情感分析、信息抽取、搜索推荐等NLP相关任务
  10. mysql innodb备份恢复和主从复制 xtrabackup工具的使用
  11. java 单例模式_谈谈Java中的单例模式
  12. 整合并接班MSN!Win8版Skype完全体验
  13. 记一次centos 7.3下的steam安装(该“STEAM”软件为美国valve开发的游戏平台)
  14. navicat导数据速度_快速解决mysql导数据时,格式不对、导入慢、丢数据的问题
  15. 新浪微博共享登录后无法退出切换账号问题解决
  16. DevExpress Office File API v20.1新版亮点:增强PDF Document API
  17. 小学教师计算机校本培训材料,教师业务学习材料及校本培训材料
  18. 网易云信IM即时通讯PHP接口开发
  19. android 推送图标大小,Android状态栏图标大小 – 使用Cordova / Phonegap推送插件
  20. 去携程实习了!半年时间,从机械转行 Java,二哥的读者真牛逼!

热门文章

  1. Makefile文件详解一(怎么在Windows下使用Makefile文件)
  2. php实训方案,最新PHP实训实践报告资料
  3. 查找每位领导的直接下属数量
  4. 互联网创业者必备的七大知识体系
  5. The hunt(狩猎)影评
  6. Excel分页设置及打印头的设定
  7. mysql的datepart函数_MySQL中的 DATE_FORMAT 与 SQL Server中的 DATEPART()函数使用介绍
  8. 29-java中Switch参数可以是什么?
  9. 云服务器修改主机名hostname
  10. 华为系统11是不是鸿蒙,再见了,EMUI11!你好,华为鸿蒙!