Android 使用Instrumentation进行界面的单元测试

如果我们要对一个Activity界面上的一个按钮的点击事件进行单元测试,则可使用ActivityInstrumentationTestCase2类来进行测试。

首先我们定义一个测试类:

publicclassTestOneActivityextends

ActivityInstrumentationTestCase2<OneActivity>{

publicTestOneActivity(){

super("com.hc.bai",OneActivity.class);

}

}

其中,OneActivity代表被测试的Activity,TestOneActivity()为该测试类的构造函数,super有两个参数,第一个是包名,我这为“com.hc.bai”。如果在你要测试的Activity的onCreate函数中,需要接受来自启动该Activity的页面传来的参数,可以在测试类中摸你传值,在这我们可以重写测试类的getActivity()函数,如下:

@Override

publicOneActivitygetActivity(){

OneActivitya;

Intenti=newIntent();

Bundleb=newBundle();

b.putString("name","sss");

b.putString("id","sss");

//a=launchActivityWithIntent(targetPackage,OneActivity.class,

//i);

a=launchActivity(targetPackage,OneActivity.class,b);

setActivity(a);

System.out.println("getActivity--------------------------");

returna;

}

通过在getActivity中执行launchActivityWithIntent或launchActivity,我们就可以将参数传递给被测试的Activity。在测试中,我们要对该界面上的一个Button进行测试,则我们还需要在Setup中定义该Button

privateButtonbt;

OneActivityone;

protectedvoidsetUp()throwsException{

one=getActivity();

bt=(Button)one.findViewById(R.id.bt_test);

System.out.println("setup********************");

}

之后我们就可以完成我们的测试函数:

publicvoidtestOne(){

one.runOnUiThread(newRunnable(){

publicvoidrun(){

//Looper.getMainLooper();

bt.performClick();

}

});

getInstrumentation().waitForIdleSync();

。。。

}

可以看到,我们需要在runOnUiThread中调用bt.performClick()事件,如果直接调用该事件,则程序会出现异常,getInstrumentation().waitForIdleSync()这一句是同步等待应用程序被闲置,之后,我们责可以写类似于assertEquals、assertTrue等函数。

}

相关推荐