Android 单元测试——AndroidTestCase
2015-07-29 17:08
387 查看
本文主要是介绍Android单元测试中AndroidTestCase的用法。下边主要是对读写XML文件的PersonService.java的单元测试。
1.MainActivity.java
2.Person.java
3.PersonService.java
4.编写测试代码PersonServiceTest.java
5.person.xml文件,记得放在src文件夹下
6.布局文件activity_main.xml
7.配置文件AndroidManifest.xml
<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 真机上可能没有,需要安装
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 真机上可能没有,需要安装
相关文章推荐
- android 时间大小比较
- Android指针管理:RefBase,SP,WP
- android之布局优化
- Android FindMyPhone功能模块的实现
- 八款常见的Android游戏引擎
- Android中关于Adapter的使用(中)SimpleAdapter
- Android中关于Adapter的使用(上)ArrayAdapter
- 拖拽RecyclerView
- Android Wifi简单管理与操作
- Android中关于Adapter的使用(下)BaseAdapter
- android INSTALL_FAILED_VERSION_DOWNGRADE 解决之道
- The connection to adb is down, and a severe error has occured解决
- 我的Android进阶之旅------>Android关于Log的一个简单封装
- Android Fragment 基本了解
- Android Studio 配置
- Android Studio 配置
- Android实例-自定义程序名称、图标、全屏和可旋转方向(XE8+小米2)
- (七十三)Android 设置EditText光标颜色及粗细 和设定EditText的光标为显示/隐藏
- Android 中的Shape
- android Socket 编程