您的位置:首页 > 移动开发 > Android开发

Android 单元测试——AndroidTestCase

2015-07-29 17:08 387 查看
本文主要是介绍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();
			}    			
		}
    }

}


2.Person.java

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();
    }
}


4.编写测试代码PersonServiceTest.java

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 真机上可能没有,需要安装
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: