XML解析和安卓单元测试框架

XML解析

<?xml version="1.0" encoding="utf-8"?>
<root name="中国"> 
  <province name="北京市" postcode="110000"> 
    <city name="市辖区" postcode="110100"> 
     <area name="东城区"> 
        <postcode>110101</postcode> 
     </area>  
     <area name="西城区"> 
        <postcode>110102</postcode> 
     </area>  
    </city>  
  </province> 
</root>
  • 任何的起始标签都必须有一个结束标签
  • 元素、属性、文本。

    • 任何有标签的都属于元素
    • 在开始标签内,除了第一个是元素名字 (比如以上的“root”、“province”、“city”、“area”、“postcode”),剩余的则称为元素属性。元素属性又分为 属性名属性值 (比如属性名是name,对应的属性值就是”北京市” ; 属性名是postcode , 对应的属性值就是”11000”)
    • 被元素标签包裹(从开始标签到结束标签)的则称为元素内容
    • 上例中,被标签包裹的 110101 叫做 文本
    • 可以将文本和文本的上级标签合并成上上级标签的属性。比如上例”东城区”元素可修改为

      <area name="东城区" postcode="110101"> </area>

Pull解析

  • 示例工程名 : PullParse
  • XmlPullParser Pull解析器,有两种方式创建解析器:

    • 方式一: org.xmlpull.v1.XmlPullParserFactory

      XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();//构造工厂实例
      XmlPullParser parser = xpf.newPullParser();//创建解析对象
    • 方式二: android.util.Xml

      XmlPullParser parser = Xml.newPullParser();
  • 手动获取事件,自行判定事件类型并做相应处理

  • Pull解析有一个整型变量(类指针),通过 XmlPullParser.getEventType()获取, 通过XmlPullParser.next() 移动
  • 属性名~属性值 XmlPullParser.getAttributeName(0) ~ XmlPullParser.getAttributeValue(0)
  • 文本 XmlPullParser.nextText();

Sax解析

  • 示例工程名 : SaxParse
  • Simple API for XML
  • 生成解析器:

    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    parser.parse(DataInputStream,ParseHandler);
  • parse()函数接受两个参数,前者是数据的输入流 , 后者是 extends 了 DefaultHandler 的解析类。然后你只要在parse函数之后,直接获取解析类中的解析出来的对象表就可以了

    provinceList = handler.provinceList;
  • 自动将事件推入执行函数进行处理,所以你只要在解析类中填写处理方法就可以了。

  • 属性名~属性值 Attributes.getQName(0) ~ Attributes.getValue(0)
  • 文本内容 自动调用characters()函数

总结

  • Pull和Sax类似,都是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Pull和Sax都比较节约内存资源,不会像Dom那样要把所有节点以对树的结构展现在内存中。 但Pull比Sax更加可定制,因为Pull可以在满足了需要的条件后不再获取事件,结束解析。所以安卓官方更推荐使用Pull解析。

debug查看pull解析流程

  • 开始标签之后即使是空的,但是却有一个隐藏的换行符(假如xml格式化),也可以产生文本事件
  • XmlPullParser.nextText() :
    If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned,otherwise exception is thrown. After calling this function successfully parser will be positioned on END_TAG.

测试

按岗位分

  • 黑盒测试:测试业务逻辑 - 用户角度
  • 白盒测试:测试逻辑方法 - 开发者角度

按测试粒度

  • 方法测试 function
  • 单元测试 unit
  • 集成测试 integration
  • 系统测试 system

按暴力程度

  • 冒烟测试 smoke
  • 压力测试 pressure

自动化测试工具

  • 安卓提供 monkey , 模拟屏幕随机触摸事件

单元测试框架

  • AndroidManifest.xml 中

    • manifest标签加入以下代码

      <instrumentation
          android:name="android.test.InstrumentationTestRunner"
          android:targetPackage="com.example.unittest" >
      </instrumentation>
    • application标签加入以下代码

      <uses-library android:name="android.test.runner"/>
  • 测试类 extends AndroidTestCase , 然后自己编写一个函数 , 在函数里面调用你要测试的代码 , 对于测试类通过 Run as - Android Junit Test 来启动运行,

  • 单元测试依然需要开启模拟器
  • assertEquals 断言 , 第一个参数预期结果, 第二个参数对比结果
  • 示例工程名 : UnitTest

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇