学android有一段时间了,最让我困惑的是项目老报错,一个Debug找半天很费时一直很苦恼。昨天晚上看了android单元测试资料。给大家分享下我学到的一点调试技巧,不要喷我。小弟刚接触android不久。首先单元测试(Junit)是由Erich Gamma和KentBeck编写的一个回归测试框架。Junit测试是程序员自己测试,即通常我们所说的白盒测试。目前版本主要分为3.x跟4.x。这里我用SAX解释XML的实例做个小测试。好了,废话不多说,直接写步骤吧。
1)首先在AndroidManifest.xml中加入下面代码: (注意你的测试类必须写在targetPackage包下面)
<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.itcast.action" android:label="Tests for My App" />
2)建立相应的xml文件,可以在本项目下面。也可以放sdCardDir中。
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>jack</name>
<age>28</age>
</person>
<person id="20">
<name>kebi</name>
<age>30</age>
</person>
<person id="21">
<name>xiaoxiao</name>
<age>23</age>
</person>
</persons>
3)建立service,解析xml文件(这里就不做过多的注释了,相信大家都了解)
public class SAXPersonService {
public List<Person>getPerson(InputStream instream) throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser perser=factory.newSAXParser();
PersonHandler handler=new PersonHandler();
perser.parse(instream,handler);
return handler.getPersons();
}
public final class PersonHandler extends DefaultHandler{
List<Person>persons=null;
Person person=null;
String tag=null;
public List<Person>getPersons(){
return persons;
}
@Override
public void startDocument() throws SAXException {
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("person".equals(localName)){
person=new Person();
person.setId(new Integer(attributes.getValue(0)));
}
tag=localName;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tag!=null){
String date=new String(ch,start,length);
if("name".equals(tag)){
person.setName(date);
}else if("age".equals(tag)){
person.setAge(new Short(date));
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("person".equals(localName)){
persons.add(person);
person=null;
}
tag=null;
}
}
4)进行单元测试(这里需要注意几点,1.测试类必须继承AndroidTestCase,2.方法名必须以test开头。)
public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";
public void testSAXgetPersons() throws Throwable{
InputStream inStream=this.getClass().getClassLoader().getResourceAsStream("person.xml");
SAXPersonService service=new SAXPersonService();
List<Person>persons=service.getPerson(inStream);
for(Person person:persons){
Log.i(TAG, person.toString());
}
}
}
1)首先在AndroidManifest.xml中加入下面代码: (注意你的测试类必须写在targetPackage包下面)
<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.itcast.action" android:label="Tests for My App" />
2)建立相应的xml文件,可以在本项目下面。也可以放sdCardDir中。
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>jack</name>
<age>28</age>
</person>
<person id="20">
<name>kebi</name>
<age>30</age>
</person>
<person id="21">
<name>xiaoxiao</name>
<age>23</age>
</person>
</persons>
3)建立service,解析xml文件(这里就不做过多的注释了,相信大家都了解)
public class SAXPersonService {
public List<Person>getPerson(InputStream instream) throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser perser=factory.newSAXParser();
PersonHandler handler=new PersonHandler();
perser.parse(instream,handler);
return handler.getPersons();
}
public final class PersonHandler extends DefaultHandler{
List<Person>persons=null;
Person person=null;
String tag=null;
public List<Person>getPersons(){
return persons;
}
@Override
public void startDocument() throws SAXException {
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("person".equals(localName)){
person=new Person();
person.setId(new Integer(attributes.getValue(0)));
}
tag=localName;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tag!=null){
String date=new String(ch,start,length);
if("name".equals(tag)){
person.setName(date);
}else if("age".equals(tag)){
person.setAge(new Short(date));
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("person".equals(localName)){
persons.add(person);
person=null;
}
tag=null;
}
}
4)进行单元测试(这里需要注意几点,1.测试类必须继承AndroidTestCase,2.方法名必须以test开头。)
public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";
public void testSAXgetPersons() throws Throwable{
InputStream inStream=this.getClass().getClassLoader().getResourceAsStream("person.xml");
SAXPersonService service=new SAXPersonService();
List<Person>persons=service.getPerson(inStream);
for(Person person:persons){
Log.i(TAG, person.toString());
}
}
}