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等函数。
}