本文主要是介绍Android单元测试中AndroidTestCase的用法。下边主要是对读写XML文件的PersonService.java的单元测试。
1.MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Button readBtn= null;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
readBtn = (Button)findViewById(R.id.readbtn);
readBtn.setOnClickListener(new readBtnClick());
}
private final class readBtnClick implements View.OnClickListener {
public void onClick(View v) {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("person.xml");
List<Person> persons;
try {
persons = PersonService.getPersons(inputStream);
for (Person person : persons){
Toast.makeText(getApplicationContext(), person.toString(), Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
}
}
3.PersonService.java
public class PersonService {
public static List<Person> getPersons(InputStream xml) throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml, "UTF-8"); //为Pull解释器设置要解析的XML数据
int event = pullParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())){
int id = Integer.valueOf(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if ("name".equals(pullParser.getName())){
String name = pullParser.nextText();
person.setName(name);
}
if ("age".equals(pullParser.getName())){
int age = Integer.valueOf(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
/**
* 保存数据到xml文件中
* @param persons
* @param out
* @throws Exception
*/
public static void save(List<Person> persons, OutputStream out) throws Exception {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName().toString());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush();
out.close();
}
}
public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";
public void testPersons() throws Exception {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("person.xml");
List<Person> persons = PersonService.getPersons(inputStream);
for (Person person : persons){
Log.d(TAG, person.toString());
}
}
public void testSave() throws Exception {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(11, "张三", 15));
persons.add(new Person(22, "李四", 25));
persons.add(new Person(33, "王五", 35));
//存到所属包下面
File xmlFile = new File(getContext().getFilesDir(), "person1.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
PersonService.save(persons, outStream);
}
}
5.person.xml文件,记得放在src文件夹下
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>user1</name>
<age>25</age>
</person>
<person id="24">
<name>user2</name>
<age>22</age>
</person>
</persons>
6.布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="XML文件读写"
tools:context=".MainActivity"
android:textSize="24dip"
android:textStyle="bold"
android:layout_marginTop="60dip"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dip"
android:gravity="center">
<Button
android:id="@+id/readbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="读取" />
<Button
android:id="@+id/writebtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:textSize="20dip"
android:text="写入" />
</LinearLayout>
</LinearLayout>
7.配置文件AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eboy.readwritexml"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.eboy.readwritexml.MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner"/>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.eboy.readwritexml"
android:label="Tests for My App" />
</manifest>
注意:
<uses-library android:name="android.test.runner" />放在application标签里边;
<instrumentation android:targetPackage="com.example.unittestinstrumentation"
android:name="android.test.InstrumentationTestRunner" />放在application标签外边。
8.运行测试程序,运行测试程序有2种方式
(1) 在andriodproject 上右击,run as Andriod JUnit Test,直接运行测试用例
(2)在模拟器上,运行测试用例。在模拟器中选择dev tools->“andriod.test.InstrumentationTestRunner”
来运行测试用例。这种很好,可以不需要pc运行测试用例。
注意:dev tools 真机上可能没有,需要安装