测试

转载 2012年03月22日 21:18:28

Content Provider测试、Service测试相比,Activity测试尤其离不开Android的测试框架(instrumentation framework),这是因为Android中的activities有着复杂的生命周期,而这些生命周期的各个阶段都是基于回调方法的,而这些方法只能由Android的测试框架来直接调用,也就是说,在一个程序中,向UI发送事件的唯一方法就是通过Android的测试框架。

本文将根据官方文档,来介绍一下怎样进行activities测试。


在开始之前,有必要介绍一下与activity测试相关的类:

InstrumentationTestCase,该类是我们进行activities测试的基类,主要就是用来为我们进行activities测试使用的测试用例(test case)的子类提供测试instrumentation,具体对于activity测试,这个基类主要提供了如下的功能:

Activity的生命周期控制:通过InstrumentationTestCase提供的instrumentation,我们可以使用测试用例类来对要测试的activity进行startpausedestroy

依赖注入(dependency injection):Instrumentation允许我们创建和使用诸如ContextApplication等的mock system objects来运行要测试的activity。这样做的最大好处就是可以控制测试环境,并且让要测试的activityproduct环境相隔离。另外我们还可以自己写intent,并通过这些intent来启动activity

UI交互:通过instrumentation,我们可以直接向要测试的activityUI发送按键和触屏事件。

通过继承TestCaseAssertactivity测试类也提供了JUnit测试框架。其中两个主要的测试子类是:ActivityInstrumentationTestCase2ActivityUnitTestCase

ActivityInstrumentationTestCase2是被设计用来对一个程序中的一个activity或者多个activities进行功能性的测试。而被测试的activity通过使用标准的系统Context运行在独立的测试程序实例中,并且我们可以向这写activity来发送模拟的intent,但我们并不能模拟Context或者activity所在的Applications

ActivityUnitTestCase这个类主要用来在一个隔绝的环境中来测试一个单独的activity。在启动这个activity之前,我们可以注入一个模拟的Context或者Application,但我们不能向这个被测试的activity发送模拟的intents

MockApplication主要用来帮助控制测试环境,只有在使用ActivityUnitTestCase这个测试用例类的时候才可使用。

ViewAsserts,主要用来定义断言(assertion


下面是进行activity测试的具体过程:

首先,根据SDK安装目录中的Spinner范例,新建一个android工程SpinnerActivity,作为被测试的工程。然后新建一个用于测试SpinnerActivity的测试工程,取名为SpinnerActivityTest,包名为SpinnerActivity的包名加上“.test”,测试的target选择SpinnerActivity,关于如何创建一个工程的测试工程可以参看:

http://blog.csdn.net/yaolingrui/article/details/7360101

还有一种创建测试工程的方法就是:在创建被测试工程的时候同时创建测试工程,这是推荐的创建过程,这一部分可以参看官方文档中的相关部分,官方文档为:

http://developer.android.com/resources/tutorials/testing/activity_test.html 

新建好测试工程之后,测试工程中将搭建起了测试的基本框架,在测试工程的AndroidManifest.xml文件中,将为我们自动添加上相关的测试信息,包括指定被测试的程序,和使用android.test.runner类扩等。

在创建好测试工程之后,然后,就是在测试工程中创建test cast类,具体就是先创建一个est case的类文件,然后在这个类文件中添加test case构造方法、set up方法,添加初始条件测试、UI测试和状态管理测试。

创建类文件:名为SpinnerActivityTest ,继承自android.test.ActivityInstrumentationTestCase2<SpinnerActivity> 

添加构造方法:指定要测试程序的包名和main activityclass,这主要是用来指定要测试的applicationactivity

添加testUp()方法:该方法在每次测试之前都会被调用,主要用来初始化测试环境,包括初始变量等,关于这方面,还可以添加testDown()方法,该方法将在每次测试结束之后调用。注意要调用setActivityInitialTouchMode(false) 方法,该方法是用来关闭模拟器或是及设备的touch mode,如果不关闭的话,当测试工程的测试方法向程序发送key事件的话,这些调用将会被忽略。

添加初始条件测试:testPreConditions(),主要用来确保要被测试的程序被正确的初始化。

添加UI测试:用来向要被测试的UI,发送key事件。

添加状态管理测试

再然后就是运行这个测试工程,查看测试结果。注意选择Run as>Android JUnit Test

α测试和β测试区别

α测试       α测试是用户在开发环境下的测试,或者是开发内部的用户在模拟实际环境下的测试;        Alpha 测试(α测试)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在...
  • u011987219
  • u011987219
  • 2015年10月19日 21:45
  • 4373

单元测试,集成测试,系统测试,验收测试

单元测试                                                   1、什么是单元测试? 单元测试是对程序中的单个子程序、子程序或过程进行测试,也就是说一开始...
  • slforeverlove
  • slforeverlove
  • 2015年07月23日 20:35
  • 3474

功能测试与自动化测试到底谁高级?

转眼出来工作已经4年了,在这4年里主要从事测试工作,今天我想在这里说下目前我对测试行业的一些认识。 其实测试这个职位无非分为功能测试,性能测试,自动化测试以及安全性测试,随着近几年测试的发展,很多公...
  • congzi529163036
  • congzi529163036
  • 2015年04月30日 15:28
  • 1197

怎么样做一个好测试

天下大势,分久必合,合久必分。          世上本没有软件测试工程师,挖的坑多了,自然就需要有人背锅,软件测试工程师应运而生。          说背锅是开个玩笑,但有些锅是不得不接的。比如...
  • kufei123
  • kufei123
  • 2015年08月11日 10:34
  • 1638

静态测试与动态测试

A。什么是静态测试?静态测试包含哪些内容? 静态测试:静态测试是指不运行被测程序本身,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。其被测对象是各种与软件相关的有必要进行测试的产...
  • dancing_youh
  • dancing_youh
  • 2015年09月19日 13:16
  • 4165

集成测试基本内容概述

1、概述若每个模块都经过了严格的单元测试,还需要继承测试吗?人们常常会提出这样的疑问。回答是肯定的,确实需要集成测试。在测试过程中经常遇到的情况是:单元测试中每个模块都能单独工作,但是将这些模块集成到...
  • u012848631
  • u012848631
  • 2015年06月12日 09:51
  • 2392

软件测试种类(一):包括功能性测试,可靠性测试,强度测试等

软件测试种类(一)   软件测试是由一系列不同的测试组成,主要目的是对以计算机为基础的系统进行充分的测试。   功能测试   功能测试是在规定的一段时间内运行软件系统的所有功能,以验证这个...
  • Li__YingYing
  • Li__YingYing
  • 2014年07月21日 17:51
  • 2464

软件测试——负载,压力,容量和性能测试的联系和区别?

最近,在总结系统测试类型的过程中,对“负载测试、压力测试、容量测试、性能测试”这几个测试类型有些分不清界限,上网查了一些资料,汇总如下:   1.负载测试(Load testing):        ...
  • haiyan_cf
  • haiyan_cf
  • 2014年08月31日 10:36
  • 3803

安全测试、渗透测试的理解

安全测试是侧重于应用程序所面对对安全威胁而进行的有关验证应用程序的安全服务和识别潜在安全性缺陷的过程。目的并不最终证明应用程序是安全的,而是用于验证存在哪些安全漏洞,来确保应用程序的安全。 渗透...
  • Joy0709
  • Joy0709
  • 2015年03月10日 11:44
  • 833

如何进行安全性测试?

1.功能验证   功能验证是采用软件测试当中的黑盒测试方法,对涉及安全的软件功能,如:用户管理模块,权限管理模块,加密系统,认证系统等进行测试,主要验证上述功能是否有效,具体方法可使用黑盒测试方法。...
  • Joy0709
  • Joy0709
  • 2014年12月11日 23:24
  • 1926
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:测试
举报原因:
原因补充:

(最多只允许输入30个字)