您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
Android中Junit测试、XML的序列化与解析
作者:网络转载 发布时间:[ 2016/5/9 11:00:22 ] 推荐标签:单元测试 Android

  一、关于Junit测试
  首先需要在manifest.xml中配置,在manifest节点下指定以下信息其中targetPacketage是你想要测试的项目的包名
<!--     指定测试信息和要测试的包 -->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.itheima28.junittest" >
</instrumentation>
在application节点下加入
<!--         指定引用的测试包 -->
<uses-library android:name="android.test.runner" />
使用时直接继承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<Person> personList = parserXmlFromLocal();
for (Person person : personList) {
Log.i("TestCase", person.toString());
}
}
/**
* 写xml文件到本地
*/
private void writeXmlToLocal() {
List<Person> 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");        // <persons>
for (Person person : personList) {
// 开始写人
serializer.startTag(null, "person");    // <person>
serializer.attribute(null, "id", String.valueOf(person.getId()));
// 写名字
serializer.startTag(null, "name");        // <name>
serializer.text(person.getName());
serializer.endTag(null, "name");        // </name>
// 写年龄
serializer.startTag(null, "age");        // <age>
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age");        // </age>
serializer.endTag(null, "person");    // </person>
}
serializer.endTag(null, "persons");            // </persons>
serializer.endDocument();        // 结束
} catch (Exception e) {
e.printStackTrace();
}
}
private List<Person> getPersonList() {
List<Person> personList = new ArrayList<Person>();
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<Person> 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<Person> personList = null;
Person person = null;
String id;
while(eventType != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName();    // 获得当前节点的名称
switch (eventType) {
case XmlPullParser.START_TAG: // 当前等于开始节点  <person>
if("persons".equals(tagName)) {    // <persons>
personList = new ArrayList<Person>();
} else if("person".equals(tagName)) { // <person id="1">
person = new Person();
id = parser.getAttributeValue(null, "id");
person.setId(Integer.valueOf(id));
} else if("name".equals(tagName)) { // <name>
person.setName(parser.nextText());
} else if("age".equals(tagName)) { // <age>
person.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:        // </persons>
if("person".equals(tagName)) {
// 需要把上面设置好值的person对象添加到集合中
personList.add(person);
}
break;
default:
break;
}
eventType = parser.next();        // 获得下一个事件类型
}
return personList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd