Android Testcase

       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的测试机制在后面的博客会继续分析。

猜你喜欢

转载自blog.csdn.net/alvinhuai/article/details/9121371