加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 08:39:02 所属栏目:百科 来源:网络整理
导读:XML解析 ?xml version="1.0" encoding="utf-8"?root name="中国" province name="北京市" postcode="110000" city name="市辖区" postcode="110100" area name="东城区" postcode110101/postcode /area area name="西城区" postcode110102/postcode /area /c

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读