Android Instrumentation基础使用

    这两天准备研究Robotium的源码,不过由于Robotium是以Instrumentation为基础的,因此就先补习了一下Instrumentation的基础。

    Instrumentation是Android自带一个单元测试框架,不过虽然这么说,其对于大部分应用开发人员来讲,最大的作用反而是用于功能或UI测试。

    整个框架继承自JUnit框架,使用方法也类似,也是要继承TestCase类。不过在Instrumentation中,需要继承的是几个Google提供的TestCase的子类,其中最重要也是最常用的是ActivityInstrumentationTestCase2这个类,一般进行应用界面测试时都需继承此类(Robotium一般也是使用此类)。当然,Android也提供了几个其他选择用于测试其他组件:

 

    这几个类全部基于AndroidTestCase类,只不过根据各个组件的特性提供了不同的get方法,如getActivity(), getService()等等,而AndroidTestCase继承于junit的TestCase类,所以所有测试类遵循单元测试框架。

 

    要写一个APK的Instrumentation测试,首先准备一个测试目标——即待测试的APK。然后再建立一个APK作为测试APK,在Manifest中添加如下声明(其中targetPackage一项需要填写测试目标的包名):

<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.test.target" />

 

    同时,还需在Application标签中嵌入如下声明:

<uses-library android:name="android.test.runner" />

     

    声明完毕,可以开始写测试代码了,如下:

 

package com.tc.upnptest.test;

import android.app.Activity;
import android.app.Instrumentation.ActivityMonitor;
import android.app.Instrumentation.ActivityResult;
import android.content.Intent;
import android.os.SystemClock;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

public class MainTest extends ActivityInstrumentationTestCase2{
        private Activity target;
        private TextView tx;

	public MainTest() throws ClassNotFoundException {
		super(Class.forName("com.test.target.MainActivity"));
	}
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
                target =  getActivity();
                tx = (TextView) a.findViewById(0x7f060000);
	}

	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testMain() {
		dosomething();
                assertTrue(true);
	}
}
   

相关推荐