安卓006单元测试
Android 测试,日志
测试
常见测试分类在介绍Android Junit前先介绍一下常见的测试分类。
根据是否知道源程序源码:
黑盒测试:不知源码,只是测试程序的功能
白盒测试:知道源码,根据源代码进行测试
根据测试的粒度:(模块的大小)
单元测试:unit test
功能测试:function test:方法测试
整合测试:integration test:几个模块的测试,服务器/客户端的联调
系统测试:system test
根据测试的次数:(暴力测试)
冒烟测试:smoke test,不停的执行操作,直到系统崩溃
Google提供了一个monkey
Adb shell:进入模拟器目录,monkey
2000,通过monkey是随机点击2000次
monkey –p 包名 次数:只测试某个应用程序
压力测试:pressure test
Junit 测试框架
运行测试代码:后台会帮我们做两步操作
上传当前应用程序到手机系统
发送指令通知手机测试刚才上传的代码
所以需要在清单文件里配置:
添加指令集(manifest节点下)
android:targetPackage="com.example.sqlitephone" />
targetPackage:是测试目标包
指令集依赖jar包(application节点下)
Junit 测试步骤
单元测试
在实际开发中,开发android软件的过程需要不断地进行测试。而使用Junit 测试框架,则是正规的Android开发的必用技术,Android很好封装了Junit测试框架,可以模拟发送事件和检测程序处理的正确性
* Android单元测试实现流程
1.添加测试类库
在AndroidManifest.xml 的 节点 添加测试类库
2.设置测试环境
3. 编写测试类
- 获取上下文getContext()- 继承AndroidTestCase
- 使用断言 assertEquals()
- 查看测试效果
我们完成了一个业务方法,想要对其进行测试,Android程序是不能写main
方法运行的,需要建测试项目。
1. 创建测试项目
创建测试工程
定义工程名
选择要测试哪个工程
创建测试类,注意要继承AndroidTestCase
编写测试类
可以直接使用被测试工程中的业务类,测试方法必须以小写“test”开头
2. 不创建测试项目,加测试类
在AndroidManifest.xml清单文件中添加配置
< instrumentation android:targetPackage= "cn.itcast.junit"
android:name= "android.test.InstrumentationTestRunner" />
定义一个类继承AndroidTestCase,定义测试方法
Junit 单元测试
新建业务方法
例如计算器的加法:
// 计算器
public class Calc {
/**
* 计算器相加的方法
* @param x
* @param y
* @return
*/
public int add(int x, int y) {
return x + y;
}
}
新建Junit测试类,对add方法进行单元测试
//Android中想要进行单元测试 需要继承AndroidTestCase
public class TestCalc extends AndroidTestCase{
//需要写一个测试方法
public void testAdd(){
//想测试 计算器相加的方法
Calc calc = new Calc();
int result = calc.add(5, 6);
//断言
assertEquals(11,result);
}
}
在清单文件中添加测试指令
android:targetPackage="com.itheima.unit"
android:label="Tests for My App" />
运行测试方法testAdd
如图:双击方法,右键Run As——Android Junit Test
运行结果:绿条代表测试通过。
Junit 单元测试,在公司中会用到,所以大家需要掌握。
Android Junit 拓展知识
注意:拓展知识并不是必须要求掌握的,心有余力之时可以作为进一步提升的
参考。
Android
测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序
可以精确控制应用程序。使用Instrumentation,
你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的
多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。
Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能
。
通过在测试工程的manifest文件中添
加
试的应用程序包名,以及告诉Android如何运行测试程序。下面的图片概要的描
述了Android的测试环境:
在
Android中,测试程序也是Android程序,因此,它和被测试程序的书写方式有
很多相同的地方。SDK工具能帮助你同时创建主程序工程及它的测试工程。你
可以通过Eclipse的ADT插件或者命令行来运行Android测试。Eclipse的ADT提供
了大量的工具来创建测试用例,运行以及查看结果。
Android提供了基于JUnit测试框架的测试API来书写测试用例和测试程序。
另外,Android还提供了强大的Instrumentation框架,允许测试用例访问程序的
状态及运行时对象。
Android Junit 中的主要核心API
JUnit TestCase类
继承自JUnit的TestCase,不能使用Instrumentation框架。但这些类包含
访问系统对象(如Context)的方法。使用
Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一
般常见的是它的子类,和特定组件关联。
子类有:
ApplicationTestCase——
测试整个应用程序的类。它允许你注入一个模拟的Context到应用程
序中,在应用程序启动之前初始化测试参数,并在应用程序结束之
后销毁之前检查应用程序。
ProviderTestCase2——
测试单个ContentProvider的类。因为它要求使用MockContentResolve
r,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的
。
ServiceTestCase——
测试单个Service的类。你可以注入一个模拟的Context或模拟的Appl
ication(或者两者),或者让Android为你提供Context和MockApplic
ation。
Instrumentation TestCase类
继承自JUnit
TestCase类,并可以使用Instrumentation框架,用于测试Activity。使用Instrument
ation,Android可
以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Ac
tivity生命周期的状态。
基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件
给UI。子类还可以注入一个模拟的Intent。子类有:
ActivityTestCase——Activity测试类的基类。
SingleLaunchActivityTestCase——
测试单个Activity的类。它能触发一次setup()和tearDown(),而不是
每个方法调用时都触发。如果你的测试方法都是针对同一个Activity
的话,那就使用它吧。
黑马Android课程笔记 就业服务部出品
SyncBaseInstrumentation——测试Content
Provider同步性的类。它使用Instrumentation在启动测试同步性之前
取消已经存在的同步对象。
ActivityUnitTestCase——
对单个Activity进行单一测试的类。使用它,你可以注入模拟的Cont
ext或Application,或者两者。它用于对Activity进行单元测试。不同
于其它的Instrumentation类,这个测试类不能注入模拟的Intent。
ActivityInstrumentationTestCase2——
在正常的系统环境中测试单个Activity的类。你不能注入一个模拟的
Context,但你可以注入一个模拟的Intent。另外,你还可以在UI线
程(应用程序的主线程)运行测试方法,并且可以给应用程序UI发
送按键及触 摸事件。
Assert类
Android还继