Android 使用Ant+Emma+Junit收集android代码覆盖率(来自联想的一位同事2012.12.24)

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

使用Ant+Emma+Junit 收集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"/>

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

猜你喜欢

转载自blog.csdn.net/aiwusheng/article/details/72457889
今日推荐