Android测试教程 11 ActivityUnitTestCase示例

本文深入讲解了Android中ActivityUnitTestCase的使用方法,包括如何设置Mock环境、测试Activity启动及交互,以及如何验证生命周期回调。同时介绍了如何利用Instrumentation对象进行更细致的测试,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

ActivityUnitTestCase 通常用来测试单独Activity。在启动被测试的Activity之前,你可以Inject一个假的Context或是Application ,使用这个Mock的Context中一个隔离环境中运行被测试的Activity。通常用于Activity的单元测试,而不和Anroid系统进行交互。

ActivityUnitTestCase 的类继承关系如下图:

应该要注意的是,作为单纯的单元测试,被测试的Activity 不运行在一般应用运行的环境中也不和其它Activity产生交互。在这种情况下,不能调用下面的方法,如果调用一般会抛出异常:

createPendingResult(int, Intent, int)
startActivityIfNeeded(Intent, int)
startActivityFromChild(Activity, Intent, int)
startNextMatchingActivity(Intent)
getCallingActivity()
getCallingPackage()
createPendingResult(int, Intent, int)
getTaskId()
isTaskRoot()
moveTaskToBack(boolean)

下面的方法可以调用,但一般不起任何作用,你可以使用getStartedActivityIntent()和getStartedActivityRequest() 来检查参数值。

startActivity(Intent)
startActivityForResult(Intent, int)

下面的方法也可以调用,一般也无效果,可以使用isFinishCalled() 和getFinishedActivityRequest检查传入的参数。

finish()
finishFromChild(Activity)
finishActivity(int)

ForwardingTest 的代码如下:

public class ForwardingTest extends ActivityUnitTestCase<Forwarding> {  private Intent mStartIntent; private Button mButton;  public ForwardingTest() super(Forwarding.class); }  @Override protected void setUp() throws Exception super.setUp();  mStartIntent = new Intent(Intent.ACTION_MAIN); }  @MediumTest public void testPreconditions() { startActivity(mStartIntent, null, null); mButton = (Button) getActivity().findViewById(R.id.go);  assertNotNull(getActivity()); assertNotNull(mButton); }  @MediumTest public void testSubLaunch() { Forwarding activity = startActivity(mStartIntent, null, null); mButton = (Button) activity.findViewById(R.id.go);  mButton.performClick();  assertNotNull(getStartedActivityIntent()); assertTrue(isFinishCalled()); }  @MediumTest public void testLifeCycleCreate() { Forwarding activity = startActivity(mStartIntent, null, null); getInstrumentation().callActivityOnStart(activity); getInstrumentation().callActivityOnResume(activity);  getInstrumentation().callActivityOnPause(activity);  getInstrumentation().callActivityOnStop(activity); } }


 

在setUp 中,创建了一个Mock Intent 对象mStartIntent 用于测试Activity。

按惯例测试方法testPreconditions 通常作为第一个测试方法,如果该方法Fail的话,表示测试所需的条件不满足,此时其它测试一般也会Fail 。但这个方法并不一定是第一个运行。

testSubLaunch 可以测试当前Activity能否成功启动其它Activity,方法getStartedActivityRequest 返回 当前Activity调用startActivityForResult(Intent, int) 的request code. 方法isFinishCalled 将在当前activity 调用finish()或finishActivity, finishFromChild 后返回true. Forwarding 示例参照Android ApiDemos示例解析(7):App->Activity->Forwarding

testLifeCycleCreate 测试Activity的生命周期回调函数,使用getInstrumentation取的Instrumentation 对象,通过Instrumentation对象可以调用Activity对应的生命周期回调函数来测试Activity的onCreate, onStart,onResume 等方法。

ActivityUnitTestCase 还提供了sendKeys 方法模拟按键事件,可以用来测试UI。

           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值