一.Android测试
1.测试的分类
1.1. 根据测试是否有源代码
a.黑盒测试:不知道源代码,测试应用程序的业务逻辑
b.白盒测试:写测试代码,测试源代码里面的业务方法
1.2. 根据测试的粒度
a.方法测试(function test):对某个方法进行测试
b.单元测试(unit test):junit测试框架,对程序的某个单元模块进行测试
c.集成测试(integration test):对系统中的多个单元集成后进行测试
d.系统测试(system test):对整个系统进行测试
1.3. 根据测试的暴力程度
a.冒烟测试(smoke test):不停的开启线程,直到系统冒烟为止
b.压力测试(pressure test):web方面应用较多,主要测试系统可以同时响应多少个请求
c.Google提供测试方法:对Android的冒烟测试和压力测试,Google提供了测试方法,cmd>>adbshell>>monkey 500(通过此步骤即可完成对系统的500次点击)
2.Android测试框架
2.1. 编写测试代码
a.不需要引入测试的jar包
b.创建测试类,继承AndroidTestCase类
c.所有的测试方法必须向测试框架抛出异常,以便让测试框架获取到异常信息
d.测试方法不能存在参数
e.通过assertEquals(value,result)方法,对结果进行断言,其中value是正确的结果,result是程序运行的结果
2.2. 清单文件中进行配置
a.在manifest节点下,添加指令集<instrumentationandroid:name=”android.test.InstumentationTestRunner” android:targetPackage=”com.hhtc.test”/>(targetPackage指定内容为要测试内容的包名)
b.在application节点下,配置函数库<uses-libraryandroid:name=”android.test.runner”/>
2.3. 上传到手机,在dalvik虚拟机里运行
3.日志的等级
3.1. 显示平台:与web控制台的不同,Android是通过Logcat显示日志信息
3.2. 日志的等级
a.verbose 提醒 黑色 log.v(tag,””)
b.debug 调试 蓝色 log.d(…)
c.info 信息 绿色 log.i(…)/System.out.println()
d.warn 警告 橙色 log.w(…)/System.err.println()
e.error 错误 红色 log.e(…)
二.文件操作
1.文件的读写
1.1. 手机存储空间
a. 手机内部存储空间:手机的一块微内存,相当于电脑的ROM,断电了数据还是存在的
b. 手机内存:相当于电脑上的内存条,RAM,断电后数据消失
c. 外部存储空间:SD卡
1.2. 写入文件到手机
a. 调用context.getFilesDir()/Environment.getDataDirectory()可以获得手机的存储空间的目录
b. 自定义输出流或者通过context.openFileOutput()创建输出流,将要保存的数据保存到手机的内部存储空间上
1.3. 写入文件到SD卡上
a. 调用Environment.getExternalStroageDirectory()方法,获取到手机SD卡的目录
b. 自定义输出流或者通过context.openFileOutput()创建输出流,将要保存的文件保存到手机SD卡上
c. 在Manifest清单文件<manifest>节点下,添加写入SD卡的权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
d. 写入SD卡,需要在清单中设置权限;读取SD卡默认情况下不需要权限,Android4.0之后,如果设置了SD卡读写保护,则必须要在清单文件中设置读的权限
e. 获取SD卡状态:Environment.getExternalStroageState(),常量Environment.MEDIA_MOUNTED为已安装
1.4. 常用的AndroidAPI
a. context.getCacheDir():获取文件的缓存目录,对应手机上的/data/data/包名/cache
b. context.openFileOutput(name,mode):获取输出流,第一个参数为文件名,第二个参数为模式,模式有MODE_PRIVATE(私有模式)/MODE_APPEND(追加模式)/MODE_WORLD_READABLE(全局可读)/MODE_WORLD_WRITEABLE(全局可写)
c. context.openFileInput(name,mode):获取文件的输入流,参数同上
2.XML操作文件
2.1. 初始化序列器:通过Xml.newSerializer()获取一个xml文件的初始化序列器
2.2. 序列器配置参数:通过setOutput(fos,encoding)设置序列器参数,第一个参数为文件输出流,第二个参数为字符编码
2.3. 写Xml文件:通过序列器的startDocument()和endDocument()设置xml文件的开始/结束文档标记,startTag(namespace,name)和endTag(name)设置xml中节点的标记,text()用于获取xml开始和结束标记之间的内容
3.SharedPreferences操作文件
3.1. 获取SharedPreferences(简称sp):可以通过context.getSharedPreferences(name,mode),第一个参数为sp的名字,第二个参数为模式(参考1.4.b)
3.2. 在处理OnClick事件的方法中获取编辑器:sp.edit(),通过编辑器的putBoolean(…),putInt(…)将事件保存(结果以.xml的形式保存在手机内存中),通过编辑器的commit()方法提交事务
3.3. 获取事件响应的结果,通过sp的getBoolean(…),getInt(…)方法得到响应的结果
3.4. View根据sp获得的响应结果,设置数据回显到页面上
4. pull解析
4.1. 常见的解析方式
a. SAX解析:基于整个事件,进行逐步解析
b. DOM解析:将整个树状结构加载到内存中
c. Pull解析:android内部提供的解析方式,类似于SAX解析,开源XML解析的框架
4.2. 初始化序列器:通过调用Xml.newPullParser()(简称parser),获得序列器,设置序列器的属性parser.setInput(in,encoding),第一个参数问输入流,第二个参数为编码格式
4.3. 对Xml文件进行解析
a. 获取当前的事件类型,parser.getEventType()
b. 设置type!=XmlPullParser.END_DOCUMENT条件进行遍历,让解析器解析到文件的末尾处
通过XmlPullParser.START_TAG开始遍历所有的节点,通过XmlPullParser.END_TAG对遍历的节点进行处理