首先我们先想下,如果要实现对Activity的测试需要些什么?首先需要创建Activity(这个Android SDK中已经提供了),然后可以控制Activity的生命周期,这些是最基本的。在Android SDK中说明过Activity的创建是异步的,也就是说当我们调用startActivty()后,这个函数立刻返回,而不是等待Activity创建好后才返回,这就需要一些同步方面的操作。将前面的概括起来就是2个方面:控制Activity的生命周期与同步方面的问题。Android SDK为我们提供了 instrument,在android.test包中InstrumentationTestCase 类有个函数getInstrumentation()以及通过adb shell am instrument启动测试例子的方法中,都提到了instrument,下面就对instrumentation详细说明。
什么是Instrumentation?android.app包中Instrumentation类结构,如下图所示
其包含有2个内部类:ActivityMoniter、ActivityResult
然后我们看下Instrumentation类的函数,列举其主要函数如下:
看了这些,我们在结合前面说的2个方面:制Activity的生命周期与同步方面的问题,在Instrumentation类中都实现了,尤其是些同步操作方面的。
Instrumentation简单使用的例子
public class HelloTest extends InstrumentationTestCase { Hello mActivityTested; public HelloTest() {} //@Override protected void setUp() throws Exception { super.setUp(); Intent intent = new Intent(); intent.setClassName(“com.xmobileapp.hello”, Hello.class.getName()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mActivityTested = (Hello) getInstrumentation().startActivitySync(intent); } //@Override protected void tearDown() throws Exception { mActivityTested.finish(); super.tearDown(); } }在这里我们使用InstrumentationTestCase类的getInstrumentation()函数获取Instrumentation对象,通过Instrumentation的startActivitySync()函数启动一个Activity,直到Avtivity启动后返回。
选择Instrumentation面板后,我们就可以编辑Instrumentation标签了,界面如何操作在这里就不说明了,主要说明属性值的意义:
总结说明
学习完了Instrumentation,心中的很多问题都没有了,还需要到Android SDK中去深入的学习这个类,才能更好的测试Activity对象。
参考资料: