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

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

public class TestOneActivity extends 
         ActivityInstrumentationTestCase2<OneActivity> { 
     public TestOneActivity() { 
         super("com.hc.bai", OneActivity.class); 
     } 
} 

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

复制代码
@Override 
     public OneActivity getActivity() { 
         OneActivity a; 
         Intent i = new Intent(); 
         Bundle b = new Bundle(); 
         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--------------------------"); 
         return a; 
     } 
复制代码

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

private Button bt; 
OneActivity one; 
protected void setUp() throws Exception { 
         one = getActivity(); 
         bt = (Button) one.findViewById(R.id.bt_test); 
         System.out.println("setup********************"); 
} 

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

复制代码
public void testOne() { 
one.runOnUiThread(new Runnable() { 
             public void run() { 
                 //Looper.getMainLooper(); 
                 bt.performClick(); 
             } 
         }); 
         
         getInstrumentation().waitForIdleSync(); 
          。。。 
} 
复制代码

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

 

 

本文转自:http://lxfgrace.iteye.com/blog/1609759

posted @   似水流云  阅读(718)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示