Android中Junit测试、XML的序列化与解析


一、关于Junit测试

首先需要在manifest.xml中配置,在manifest节点下指定以下信息其中targetPacketage是你想要测试的项目的包名

           

application节点下加入

     

使用时直接继承AndroidTestCase即可

public class TestCase extends AndroidTestCase {    public void test() {            。。。。       }}

二、使用XmlSerializer类序列化XML

XmlSerializer主要是以数据流的形式序列化XML而它是一个接口无法直接实例化,需要通过一个静态方法Xml.newSerializer获取对象

下面是一些常用的方法

  • startDocument(String,boolean):第一个参数设置文档的编码格式,第二个参数设置是否是一个独立的文档,一般设置为true。
  • endDocument():标记XML文档的结束,XML文档标签均为成对出现,有始有终。
  • startTag(String,String):一个XML标签的开始,第一个参数为命名空间,一般为null即可,第二个参数为标签名。
  • endTag(String,String):一个XML标签的结束,第一个参数为命名空间,一般为null即可,第二个参数为标签名,有始有终。
  • attribute(String,String,String):设置一个标签的属性,第一个参数为命名空间,第二个参数是属性名,第三个参数为属性值。
  • text(String/...):设置标签的值

下面是一个实例

public class TestCase extends AndroidTestCase {    public void test() {//      writeXmlToLocal();                List personList = parserXmlFromLocal();                for (Person person : personList) {            Log.i("TestCase", person.toString());        }    }        /**     * 写xml文件到本地     */    private void writeXmlToLocal() {        List personList = getPersonList();                // 获得序列化对象        XmlSerializer serializer = Xml.newSerializer();                try {            File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");            FileOutputStream fos = new FileOutputStream(path);            // 指定序列化对象输出的位置和编码            serializer.setOutput(fos, "utf-8");                        serializer.startDocument("utf-8", true);    // 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>                        serializer.startTag(null, "persons");       //                         for (Person person : personList) {                // 开始写人                serializer.startTag(null, "person");    //                 serializer.attribute(null, "id", String.valueOf(person.getId()));                                // 写名字                serializer.startTag(null, "name");      //                 serializer.text(person.getName());                serializer.endTag(null, "name");        //                                 // 写年龄                serializer.startTag(null, "age");       //                 serializer.text(String.valueOf(person.getAge()));                serializer.endTag(null, "age");     //                                 serializer.endTag(null, "person");  //             }                        serializer.endTag(null, "persons");         //                         serializer.endDocument();       // 结束        } catch (Exception e) {            e.printStackTrace();        }            }        private List getPersonList() {        List personList = new ArrayList();                for (int i = 0; i < 30; i++) {            personList.add(new Person(i, "wang" + i, 18 + i));        }                return personList;    }        }

三、使用pull解析XML

PULL解析器的运行方式和SAX解析器很相似,都是事件触发机制。如开始元素和结束元素,使用parser.next()可以进行下一个元素并触发相应的事件,事件作为代码被发送,返回值是数字,因此可以用一个switch语句来对事件进行选择,然后进行相应的处理,当开始解析元素的时候,调用parser.nextText()方法可以获得下一个Text类型的元素。

常用属性

  • START_DOCUMENT
  • START_TAG
  • TEXT
  • END_TAG
  • END_DOCUMENT
private List parserXmlFromLocal() {        try {            File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");            FileInputStream fis = new FileInputStream(path);                        // 获得pull解析器对象            XmlPullParser parser = Xml.newPullParser();            // 指定解析的文件和编码格式            parser.setInput(fis, "utf-8");                        int eventType = parser.getEventType();      // 获得事件类型                        List personList = null;            Person person = null;            String id;            while(eventType != XmlPullParser.END_DOCUMENT) {                String tagName = parser.getName();  // 获得当前节点的名称                                switch (eventType) {                case XmlPullParser.START_TAG: // 当前等于开始节点                      if("persons".equals(tagName)) { //                         personList = new ArrayList();                    } else if("person".equals(tagName)) { //                         person = new Person();                        id = parser.getAttributeValue(null, "id");                        person.setId(Integer.valueOf(id));                    } else if("name".equals(tagName)) { //                         person.setName(parser.nextText());                    } else if("age".equals(tagName)) { //                         person.setAge(Integer.parseInt(parser.nextText()));                    }                    break;                case XmlPullParser.END_TAG:     //                     if("person".equals(tagName)) {                        // 需要把上面设置好值的person对象添加到集合中                        personList.add(person);                    }                    break;                default:                    break;                }                                eventType = parser.next();      // 获得下一个事件类型            }            return personList;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)程序安装地址问题
  3. Android(安卓)X86 Android-x86入门之--让你的Android-x86竖屏起
  4. Android(安卓)待机流程解析
  5. TranslateAnimation动画
  6. Android实战——Retrofit2的使用和封装
  7. Android系统手机几种运行模式解析
  8. Android(安卓)activity之间的跳转和传参
  9. android 界面传值

随机推荐

  1. kubernetes常用控制器之Job和CronJob
  2. kubernetes其他控制器之PodDisruptionBud
  3. 网页
  4. 安全防卫技术-当有人抓你衣领时
  5. Let's Encrypt签发工具CertBot-auto不再
  6. 为什么很多网站都去除oracle?
  7. 可靠型园区网组网,你该如何选择最优方案?
  8. 火星
  9. 测试一下
  10. 影响2020年代经济的8个宏观因素