Android中编纂Activity单元测试程序提高开发效率

Android中编写Activity单元测试程序提高开发效率

Android开发中,大型工程往往存在很多的Activity,这些Activity互相关联,复杂度较高。我们在开发时需要经常对界面以及交互等进行测试,每次测试运行程序后,往往需要一层一层的进入我们想看的Activity才能测试。这个过程中,可能需要输入用户名和密码,或者需要从Gallery中选择一幅图片等。因此,大型工程的每次测试都需要较长的时间,导致开发效率降低。针对这种情况,我们可以只打开某个Activity以便于进行测试,具体方法可以使用Android Test Project。

 

首先,要新建一个Test Project,Eclipse中选择File->New->Project->Android Test Project,点击Next,输入测试程序的名称,如PictureTest,点击Next。选择一个需要测试的Android工程(该工程必须是已经打开的Android Project),点击Next,然后选择测试工程的SDK版本Finish即可。这样就建立好了空的测试工程。

 

之后,需要新建一个单元测试类。对src中的空报名点右键,选择New->class,在Name中填写类名,如PictureActivityTest,Finish即可。

 

准备工作做完,可以开始编写针对Activity界面的测试类了,满足之前要求的Activity测试类需要继承ActivityInstrumentationTestCase2这个类,在<>中填入待测试的Activity类名,如PictureActivity。之后添加构造函数(自动生成即可)。


与所有单元测试程序一样,可以重写setUp()和tearDown()方法,以便于在测试前和测试后进行一些工作。重点是MediumTest,我们需要在MediumTest的时候打开这个Activity。很多时候打开Activity时,我们需要传入相应的Intent,比如显示图片的Activity,我们就需要通过Intent传入图片的Uri。编写好Intent之后,可以通过setActivityIntent(Intent intent)方法装入写好的Intent。之后就可以通过getActivity()方法打开Activity。为了防止测试程序在我们还没有看到效果的时候就运行结束,可以通过信号量CountDownLatch对象进行等待控制。这样就可以完整的对我们需要的Activity单独测试了。

 

 

public class PictureTestActivity extends
		ActivityInstrumentationTestCase2<PictureActivity> {

	private final static String TAG = "PictureTestActivity";

	public PictureTestActivity(Class<PictureActivity> activityClass) {
		super(activityClass);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void setUp() throws Exception {
		super.setUp();
	}

	@MediumTest
	public void testProcess() throws Throwable {
		Log.d(TAG, "testProcess begin.");
		final CountDownLatch signal = new CountDownLatch(1);
		setActivityIntent(getNeededIntent());
		getActivity();
		signal.await();
	}

	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
	}

	private Intent getNeededIntent() {
		Intent i = new Intent();
		i.setData(Uri.fromFile(new File("/mnt/sdcard/pics/skin1.jpg")));
		return i;
	}

}