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; } }