51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2333|回复: 2
打印 上一主题 下一主题

使用ThreadingTest进行Android应用单元测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2014-7-29 11:19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1、Android单元测试的编写

Android单元测试有两种方法,首先作为java程序,可以试用JUnit Test进行测试,另外也可使用Android JUnit Test进行单元测试。

1)、JUnit Test进行单元测试

JUnit对Android应用程序进行单元测试需要使用Java命令来启动或者在eclipse里面将启动的Bootstrap Entries改为JRE,但是这种只能测试逻辑代码,因为是是运行在JVM上,而不是Android系统中,所以不能测试Android有关的代码。

使用JUnit测试的代码,需要在函数的之前加@Test,函数必须为public类型,在eclipse中,在类上右击,选择JUnit Test即可进行测试。

2)AndroidJUnit Test进行单元测试

Android JUnit Test单元测试是一组直接或间接继承自junit.framework.Testcase的类集合,入口是InstrumentationTestRunner。

使用Android JUnit Test测试,也存在两种测试方法,测试驱动与测试代码在同一工程下和测试驱动和测试代码位于不同工程,两者之间并无巨大差异,只是在测试时,前者只安装一个App,后者安装两个App。

如下为一个单元测试的实例:

步骤 1:准备好需要测试的源代码

步骤2:添加测试类,编写测试代码














步骤3:修AndroidManifest.xml文件



注意:绿色背景为添加部分。其中android:label="Testsfor TTcalculator."在模拟器中的Dev Tools工具中,设置Instrumentation下显示的名称,在步骤4运行中,点击该标签,也可运行单元测试。在TTAndroid JUnit Test中也是重要一步,可以设置多个单元,多个名称,每个名称尽量不要重复,以区分不同的单元测试。

步骤4:运行测试类

运行测试类有三种方式,包括:

1、 命令行方式

使用adb命令启动单元测试

2、 eclipse中选择Android JUnit Test运行方式

在eclipse中,右击测试工程,选择run as -> Android JUnit Test

3、 模拟器中,使用Dev Tools

在模拟器中安装该程序后,在Dev Tools工具中,选择Instrumentation下显示的与android:label同名的标签运行单元测试。


2、TT单元测试的编写

要使用TT进行单元测试类的编写,需要将所有的测试类写到一个单独的文件夹下,在进行编译工程时,使用参数-filter将其从编译路径中排除,不对其进行插桩。如下图所示:

被测源码放在src文件夹中,单元测试驱动代码放在test_src文件下。

其他方面,需要在Android单元测试上进行的修改为:

1、引入TT Android jar包,JavaParser-Android.jar和通信包jeromq-0.3.0-SNAPSHOT.jar。

2、将继承Android JUnit Test类换成继承TT Android JUnit Test类,TT Android JUnit Test类中与Android JUnit Test相对应的类为在类名前加TT。例如与InstrumentationTestCase相对应的类为TTInstrumentationTestCase,TT Android JUnit Test类所在的包为com.zoa.android.test。

3、在重载了setUp和tearDown函数的测试类中,需要分别调用super.setUp()和super.tearDown()函数,否则无法对数据进行惊醒测试用例的区分,如果没无需进行初始化和资源释放则不用继承setUp()和tearDown()函数。

4、其他操作同Android JUnitTest操作相同。

如下为一个与上面Android JUnit Test单元测试类相对应的TT Android JUnit Test单元测试类,添加背景色的为需要注意的点,其他的与原测试代码相同,无需改动:






编写完成TT Android JUnit Test 测试类之后,使用TT对工程进行编译。

3、TT单元测试的编译

1、修改编译文件,如果是单一编码格式的工程,需要修改%TT_Path%/ant-build-a/android-instru_en.xml文件,多种编码格式源码的工程,则需要修改%TT_Path%/ant-build-a/android-instru_code_en.xml文件。修改内容为,添加-filter参数,修改方法为:

添加filterpath属性,用于过滤不需要插桩的单元测试驱动类文件。

<property location="不需要插桩编译的路径,这里为test_src路径" name="filterpath"/>

<argline=""${propath}" "${TT}"-tt="${testpropath}" -encoding=${encoding}-filter="${filterpath}"-s="${testpropath}/src""/>

在运行JavaParser处,添加绿色背景参数。

注:demo版本中需手动修改,后续版本将对此进行改进。

2、打开TT,创建一个新的工程,与非单元测试工程的编译相同。详见:http://www.threadingtest.com/xwiki/bin/view/ZOA%7C4.演示/Android+程序测试配置


4、TT单元测试的运行

在真机中测试时,需要安装Dev Tools工具。模拟器中附带该工具。

将上一步中,TT编译生成的APK文件,安装到模拟器或真机中,安装之后,会在Dev Tools工具下,Instrumentation中会出现与AndroidManifest.xml文件中android:label设置的同名的标签,点击可运行TT单元测试。

在运行TT单元测试时,需要打开TT接收数据,否则测试会阻塞在消息发送处而无法进行。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2014-7-29 11:21:30 | 只看该作者

模拟器测试步骤为:

1、打开TT,选择将要运行的测试的工程,然后打开实时监控界面,新建一个测试用例。



2、打开模拟器。

3、进行端口重定向

双击运行adb-android.bat,运行的命令为:

adb forward tcp:15555 tcp:15555

adb forward tcp:15556 tcp:15556

adb forward tcp:15557 tcp:15557

adb forward tcp:15558 tcp:15558

其中adb需要在环境变量中配置好,如果未配置,也可手动切换到%Android_sdk%\platform-tools目录下手动打开命令行窗口,运行上述命令。

如果运行adb forward –list出现:



其中,emulator-5554也可能是其他名称,则说明配置成功。

4、勾选上测试用例,set Ip为127.0.0.1,确定后点击开始。

5、打开Dev Tools,点击Instrumentation进入,点击工程中设置的标签名,如Tests for TT calculator.



点击后,开始运行单元测试。

此时TT实时监控界面会有数据的接收:



单元测试运行运行结束后,右击测试用例树右上角的刷新按钮,选择Update Testcase





会增加红色框中的测试用例,首先是与勾选的测试用例同级同名的测试类型,然后依次为测试类所在的包名,类名以及运行测试函数名。

在单元测试开始之前,被测程序的初始化数据会被保存在初始勾选的测试用例中,这里为UnitTest中。单元测试开始之后,产生的测试数据会被保存到,与测试驱动函数对应的测试用例当中。

TT单元测试完成。


真机测试步骤为:

1、打开TT,选择将要运行的测试的工程,然后打开实时监控界面,新建一个测试用例。

2、勾选上测试用例,set Ip为真机的Ip地址,确定后点击开始。

3、同模拟器测试步骤5。

回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    3#
    发表于 2014-8-16 18:17:59 | 只看该作者
    学习试用先
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-9 07:50 , Processed in 0.078732 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表