Android提供了一系列强大的测试工具,它针对Android 的开发环境,对JUnit进行了扩展,虽然仍然可以用JUnit对Android程序就行测试,但Android改进之后的测试方法可以对程序进行更全面更细致的测试。
Android的测试核心是一个instrumentation框架,这是一个完整的测试结构,在这里只是简单的介绍一下它的使用方法。Android程序代码可以简单的分为两种情况一种是有图形界面的,另一种没有图形界面,为图形界面提供一些运算处理。所以针对两种情况会有两种不同的测试,可以生成界面的Activity类的测试需要使用ActivityInstrumentationTestCase2<Activity> 来进行测试,ActivityInstrumentationTestCase2 是目前常用的测试
Activity的测试类,它继承自ActivityTestCase. 通过TearDown() Setup() 进行测试环境的建立,一般通过Assert类对结果进行判定。
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity activity;
public VolumeView mView;
public MainActivityTest() {
super("com.xxxx.xxx", MainActivity.class);
}
public void testEmpty() {
assertTrue(true);
}
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
mView = (VolumeView) activity.findViewById(R.id.volumeview);
}
}
这是一个简单的Activity创建方式,它可以对一些Activity中的事件做出测试,具体api接口可以参看谷歌官方的借口。其中MainActivity是要测试的Activity的名字。
对于一些没有图形界面的类可以通过继承InstrumentationTestCase类才进行测试。应用这个测试首先在AndroidManifest.xml进行声明,如下:
<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
android:targetPackage="com.xxxx.xxx" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.xxx.xxx" />
声明之后可以继承此类来写测试类:
例如我们有要对一个Music.java进行测试,在此类中通过一个loadFile函数对传入的文件进行分析,将文件中的内容进行保存,
public class BarlineTest extends InstrumentationTestCase {
private Context mContext;
protected void setUp() throws Exception {
super.setUp();
mContext = this.getInstrumentation().getContext(); //获取Context实例
}
public void testAttribute() throws Exception {
/*test the Barline element*/
Music mMusic = new Music(); //初始化要测试的类。
mMusic.loadFile(mContext,"testVolta1.xml"); //首先执行这个类中的函数,对testVolta1.xml进行分析。
//以下的代码就是对读取的内容进行测试,多用Assert类进行。
//Music类中函数getMeasures() 返回一个保存Measure的链表,此链表将testVolta1.xml中的measure全部保存
ArrayList<Measure> measurelist = mMusic.getMeasures();
//通过Assert类中的assertEquals函数对measurelist的大小进行校对,assertEquals函数第一个参数表示你期望的
结果,第二个参数表示实际的结果。比如在testVolta1.xml共有4个measure,这里测试measurelist是否保存了4
个measure。如果文件读取正确,在运行测试程序时没有问题,否则会报错,如果报错则说明你的源程序是有问 题的。
Assert.assertEquals(4, measurelist.size());
// 从链表中取出第一个元素,测试它是否为空,如果为空则表明程序有问题。
// test the second measure
Measure me1 = measurelist.get(1);
Assert.assertNotNull(me1);
// 同样的mesaure中也含有保存Barline的链表,测试这个链表的长度并取出一个Barline元素
ArrayList<Barline> barlist1 = me1.getBarlines();
Assert.assertEquals(2, barlist1.size());
Barline bar11 = barlist1.get(0);
//getLocation函数会返回成员变量location,在这里测试location的值与“left”是否相等,如果不等则表示出错
//在这里就是对Barline的api进行测试。看返回值与预期是否相符。因为这个是取值,所以在music.java中肯定有
一个方法是Barline.setlocation , Barline.setStyle对变量进行设置,然后通过这个测试可以判断分析文件的程序 是 否正确。
Assert.assertEquals("left",bar11.getLocation());
Assert.assertEquals(null,bar11.getBarStyle());
//这是Barline中的另一个成员变量ending11,取得Ending实例并对接口进行测试。对于Assert类有很多测试方法,
可以查看官方文档。在测试时要对类中的每个变量进行测试,确保每个变量都是对的。
Ending ending11 = bar11.getEnding();
Assert.assertNotNull(ending11);
Assert.assertEquals(1,ending11.getNumber());
Assert.assertEquals(EndingType.START , ending11.getType());
}
protected void tearDown() throws Exception {
super.tearDown();
}
这里大致介绍了一些测试方法,在编写Android工程时可以通过FILE -> NEW->Junit TestCase 创建测试程序。
有了测试程序可以省略在模拟器上测试的时间,感觉更加的快捷。这只是对一个实例进行讲解,整个Android的测试机制在后面的博客会继续分析。