Android 使用Ant+Emma+Junit收集android代码覆盖率

简介: 完成Android项目相关代码研发后,有时要求进行代码覆盖率测试,这里提出一种解决方案。

完成Android项目相关代码研发后,有时要求进行代码覆盖率测试,这里提出一种解决方案。

前提:需要环境android SDK,ant1.8.2,jdk1.6,emma(或eclemma),eclipse android环境

一、配置java环境变量

1、打开我的电脑->属性->高级->环境变量。
2、新建系统变量JAVA_HOME 和CLASSPATH

变量名:JAVA_HOME
变量值:C:\ProgramFiles\Java\jdk1.7.0
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

3、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。

变量名:Path
变量值:.%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

二、配置android 环境变量

1、 打开我的电脑->属性->高级->环境变量。
2、新建系统变量:

变量名:ANDROID_SDK_HOME
变量值:F:\android\android-sdk-windows

3、新建或编辑用户变量Path:

变量名:Path
变量值:%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;

三、配置 ant 环境变量

1、下载ant
到apache的官网下载ant(windows下选择zip压缩版)。

2、解压ant
将下载下来的apache-ant-1.8.1-bin.zip解压至某目录下,如:F:\android\apache-ant-1.8.4

3、 配置环境变量

(1)、打开我的电脑->属性->高级->环境变量。
(2)、新建系统变量:

变量名:ANT_HOME
变量值:F:\android\apache-ant-1.8.4

(3)、新建或编辑用户变量Path:

变量名:Path
变量值:%ANT_HOME%\bin;

4、检测ant环境变量是否配置成功:

输入cmd:ant

若出现以下界面,则ant环境变量配置成功。即:build.xml does not exists!
这里写图片描述

四、安装eclipse的eclemma插件,方法参见以下链接:

http://www.ibm.com/developerworks/cn/java/j-lo-eclemma/

五、在dos下执行以下命令

注意:必须以管理员身份运行Eclipse,并启动一个AVD。

1、将eclipse里的andriod工程里生成一个ant的build文件,andriod-app就是工程名:

android update project -p android-app

注:该命令直接在dos下执行即可。命令执行完成后,会在eclipse的android工程的根目录生成一个build.xml 文件。

2、将eclipse里的andriod测试工程也转换成ant工程,-m选项指定了测试工程对应的主andriod工程的位置,而android-test就是测试工程名:

android update test-project -m ../android-app -p android-test

注:该命令直接在dos下执行即可。建议进入到测试工程的目录下执行。命令执行完成后,会在eclipse的android工程的根目录生成一个build.xml 文件。

3、执行ant的相关任务,编译、执行单元测试、收集覆盖率:

ant clean emma debug install test

注:此命令必须在测试工程所在的路径下执行,并且AVD 已经起来或者设备(如pad)已经连接到电脑。

运行android-sdk-windows\tools\ant 路径下的build.xml 中定义的任务。

即:运行build.xml中定义的clean任务、emma任务、debug任务、install任务、test任务。

这里写图片描述
例如:Sample为主工程名称,SampleTest为测试工程。

android update project -p F:\LiZhenHua\Android\Sample

android update test-project -m ../Sample -p F:\LiZhenHua\Android\SampleTest

ant clean emma debug install test

执行完如下图:

这里写图片描述
如上图所示:

Android Test Project 的build.xml文件中默认会将代码覆盖率数据保存在模拟器或者pad设备的/data/data/../coverage目录下。因此需要在主工程和测试工程的AndroidManifest.xml文件中添加写入的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

操作完成后,在Android Test Project 的bin目录下,会生成一个coverage.html文件。浏览此文件即可看到代码覆盖情况,以及覆盖率。

这里写图片描述

参见资料:http://www.cnblogs.com/killmyday/archive/2012/07/23/2605708.html

使用Ant+Emma收集android代码覆盖率 黑盒方法:

步骤:

一、前四步和白盒的方法步骤相同。

二、拿到需要测试的源码,并新建一个Android Test Project。

三、建立好测试工程之后,粘贴如下代码:

这里写图片描述

代码说明:

  • MyTest:测试类名
  • ActivityInstrumentationTestCase2:黑盒测试需继承的类
  • AppProjectMainActivity:被测试的Activity。

在测试类中,必须有一个无参的测试类的构造函数和一个testActivity()方法。testActivity()方法即等到用户手动操作。

四、按照白盒测试的第五步,在dos下运行相应的命令。

五、当看到dos窗口里输出Running tests… 时,进行用户手动操作。

这里写图片描述

详细代码参见:
AppProject 和TestAppProject 工程。
参见资料:http://www.spasvo.com/news/html/2012112195538.html

常见问题及解决办法:

  • 1、 unable to locate tools.jar expected to find it in C:\Program Files\Java\jre6\lib\tools.jar

解决办法:将“C:/Program Files/Java/jdk1.6.0_16/lib”目录下的tools.jar文件拷贝到“C:/Program Files/Java/jre6/lib”目录下,重新运行命令ant,运行正常,问题解决。

  • 2、 Emma failed to dump coverage data EACCES(permission denied)

解决办法:在主工程和测试工程的AndroidManifest.xml文件中添加写入的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后重新执行第五步的相关命令。

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。

目录
相关文章
|
存储 BI 定位技术
高德Android高性能高稳定性代码覆盖率技术实践
高德这套全新的方案,简洁而不简单,巧妙地实现了无Hack采集,在保证高稳定性和不侵入源码的前提下,优雅地实现了生产环境代码覆盖率的高性能采集,已经过高德地图多版本验证,是一套成熟、稳定且高效的方案。
高德Android高性能高稳定性代码覆盖率技术实践
|
Java 测试技术 Android开发
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)(一)
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)
1506 0
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)(一)
|
测试技术 Android开发
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)(二)
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)(二)
1127 0
简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)(二)
|
Java jenkins 测试技术
Jenkins ANT+JUNIT实例(学习笔记二十七)
转载:http://www.cnblogs.com/helloIT/p/5761740.html 1.环境   windows10 专业版   Jenkins 2.7   apache-ant-1.9.6   JDK1.8.0_20 2.整体思路   jdk:支持ant脚本中的编译、测试等target。
1296 0
|
Java 测试技术 Android开发
|
测试技术 Android开发
Android单元测试(五):JUnit进阶
前面一章介绍了JUnit的一些基本用法,本章来介绍关于JUnit更高级的用法,这些功能我们可能并不一定会用到,但是了解它,对JUnit会有更深刻的认识。 5.1 Test runners 大家刚开始使用JUnit的时候,可能会跟我一样有一个疑问,JUnit没有main()方法,那它是怎么开始执行的呢?众所周知,不管是什么程序,都必须有一个程序执行入口,而这个入口通常是main()方法。
1070 0
|
Java 测试技术 Android开发
Android单元测试(四):JUnit介绍
JUnit是java开发人员的一个主要的测试工具,做Android开发同样是离不开java的,所以Android单元测试依然可以基于JUnit来写测试。但是JUnit只能运行在纯java环境上,前面我们介绍过MVP架构下,可以将View层隔离开来,单独针对Presenter层、Model层来测试。
1266 0
|
开发工具 Android开发 数据安全/隐私保护
Windows下,Ant自动化编译Android项目具体步骤和方法
 备注:若Android项目引用有第三方库,步骤和方法亦适用。    前提是已经安装好Ant。 1,首先需要创建一个批处理命令(*.
893 0
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架